スタートページJavascriptjQueryの基礎

jQueryの実例:hoverイベント

hoverイベントにより、マウスカーソルがセレクタの要素の上にマウス乗ったとき/外れたときの処理を簡単に記述できます。


一般形式

hoverは、2つの引数をもちます。
    $(セレクタ).hover(fn-over, fn-off);
  fn-over:マウスがセレクタに乗ったときの処理
  fn-out: マウスがセレクタから離れたときの処理
fn-over, fn-out は、通常は関数ですから、次のような形式になります。

<script type="text/javascript">
  $(セレクタ).hover(
    function() {      // マウスが乗ったとき
      fn-over の処理
    },           // 引数の区切なので「,」が必要
    function() {       // マウスが離れたとき(elseなどは使わない)
      fn-out の処理
    }
  );
</script>

例1:特定個所の強調(文字色の変化)

該当個所(class="キーワード")にマウスが乗ったとき、その文字列を赤色にし、離れたとき、黒色に戻す例です。次の「文章」での▼の直前に<span class="キーワード">、▲の直後に</span>があります。

文章
 jQueryとは、▼John Resig▲らによって開発されたJavaScriptのライブラリである。 、2006年に初版が、▼オープンソースソフトウェア▲として公開され、2012年には、jQueryやその関連ソフトの推進を目的とした非営利団体▼jQuery Foudation▲が設立された。現在、jQueryには豊富な▼プラグインソフト▲が、多数の組織や個人により公開されている。

<script>
    $(function(){
        $(.キーワード").hover(
            function() {
                $(this).css("color", "red");
            },
            function() {
                $(this).css("color", "black");
            }
        );
    });
</script>

$(this) とは、イベントでのセレクタ(ここでは、".キーワード")をそのまま使うという意味ですが、さらに「引金となった個所の情報」も加えています。
  $(this).css("color", "red");
    マウスが乗った個所だけが赤くなる。
  $(".キーワード").css("color", "red");
    ▼~▲のすべての個所が赤くなる。


例2:「注」の表示(表示・非表示との連携)

次の「文章」の[注]にマウスが乗ると注が表示され、離れると消えます。

文章
ポピュラーなjQueryのプラグインソフトに、jQuery UI <span id="注1">[注1]</span>があります。それをCDN<span id="注2">[注2]</span>として使用するには、head部に次の指定をすればよいのです。(以下省略)

(ここに「注2本文」が<div id="注2本文" style="display:none">~~~</div>があります。)

<script type="text/javascript">
  $(function(){
    $("#注1").hover(
      function() {
        $(this).text("(user interface)");
      },
      function() {
        $(this).text("[注1]");
      }
    );
  });
</script>
<script type="text/javascript">
  $(function(){
    $("#注2").hover(
      function() {
        $("#注2本文").css("display", "block");
      },
      function() {
        $("#注2本文").css("display", "none");
      }
    );
  });
</script>

「注1」でがマウスを乗せる個所と注本文を表示する個所が同一個所ですので「this」を使うことにより記述できます。

それに対して「注2」では、マウスを乗せる個所と注本文を表示する個所が異なります。それで、「注2本文」をdispray block/none で表示・非表示させています。


例3:サムネイル画像の拡大表示

小さな画像(サムネイル画像)を並べて表示し、マウスを乗せた画像を拡大表示します。

<script type="text/javascript">
    $(function() { 
        var 拡大画像 = new Image();          // A
        $("[id^='画像']").hover(             // B
            function(){
                拡大画像 = document.getElementById("拡大画像表示位置");// C
                拡大画像.src = this.src;     // D
                拡大画像.width = "200";      // E
            }, 
            function () { 
                拡大画像.width = "0";       // F
            } 
        ); 
    }); 
</script>

<p>
<img id="画像1" src="called/image1.jpeg" width="100" alt="">  <!-- G -->
<img id="画像2" src="called/image2.jpeg" width="100" alt="">
</p> 
<div><img id="拡大画像表示位置"></div>        <!-- H -->

このスクリプトと $("[id^='画像']").click を組み合わせて、クリックしたら画像に関する記事を表示するようなツールにすることができます。

iQueryを使わずにJavascriptだけでもこれと同じ機能をもたせることができます(参照:「画像の読込表示 画像の拡大」。iQueryのほうが、特にHTMLの記述が簡素になっています。


例4:画像の切り替え

ベースになる画像(called/image1.jpeg)が表示されており、それにマウスが乗ると代替の画像(called/image2.jpeg)になります。代替画像からマウスが離れるとベース画像に戻ります。

<script type="code">
    $(function(){ 
        $("#例4表示位置").hover( 
            function(){ 
                var 代替画像 = $(this).attr("src")                        // A
                    .replace("called/image1.jpeg","called/image2.jpeg");  // B
                $(this).attr("src",代替画像);                        // C
            }, 
            function(){ 
                var ベース画像 = $(this).attr("src")
                    .replace("called/image2.jpeg","called/image1.jpeg"); 
                $(this).attr("src",ベース画像); 
            } 
        ); 
    }); 
</script>

<p><img id="例4表示位置" src="called/image1.jpeg" alt=""></p>