jQueryオブジェクトの hover() メソッド

要素にマウスカーソルが乗ったとき及び要素からマウスカーソルが降りたときのイベントハンドラを指定する。

構文

jQueryObject.hover(handlerIn, handlerOut)
jQueryObject.hover(handlerInOut)

引数

以下に示す引数をjQueryオブジェクトのhoverメソッドに指定することができる。

handlerIn
マウスのポインタが要素に入ったときに実行する関数
handlerOut
マウスのポインタが要素から出たときに実行する関数
handlerInOut
マウスのポインタが要素に入ったとき、およびマウスのポインタが要素から出たときに実行する関数

サンプル

<div id="d1">
  ここにマウスカーソルを出し入れしてください。
</div>
<script>
  let e = jQuery('#d1')
  e.hover(function(){
    e.text('mouseover')
  }, function(){
    e.text('mouseout')
  })
</script>
  
ここにマウスカーソルを出し入れしてください。

イベントリスナーを使った書き換え

jQuery.hover() メソッドは、要素にマウスオーバーしたときとマウスアウトしたときの2つのイベントをまとめて扱うための便利なショートカットです。これを jQuery を使わずに実現するには、JavaScript の標準的なイベントリスナーである mouseenter と mouseleave イベントを使用します。

const element = document.getElementById('myElement');

if (element) {
  // handlerIn に相当
  element.addEventListener('mouseenter', function() {
    // マウスが要素に入ったときに実行する処理
    console.log('マウスが乗りました!');
    // 例: スタイルの変更
    this.style.backgroundColor = 'lightgray';
  });
  // handlerOut に相当
  element.addEventListener('mouseleave', function() {
    // マウスが要素から離れたときに実行する処理
    console.log('マウスが離れました。');
    // 例: スタイルを元に戻す
    this.style.backgroundColor = '';
  });
}

mouseenter と似たイベントに mouseover がありますが、両者には重要な違いがあります。

mouseenter はマウスカーソルが要素に入ったときにのみ発生します。子要素にマウスが入ってもイベントは発生しません(バブリングしない)。

mouseover はマウスカーソルが要素に入ったときに発生し、さらに子要素にマウスが入ってもイベントが発生します(バブリングする)。

jQuery.hover()メソッドは mouseenter と mouseleave イベントの組み合わせに相当するため、mouseover ではなく mouseenter を使うのが正しい代替手段となります。

CSS疑似スタイルを使った書き換え

もし、マウスホバー時のスタイルの変更のみが目的であれば、JavaScript を使用するよりも CSSの :hover 擬似クラスを使用する方がよりシンプルでパフォーマンスが高いです。

#myElement {
  /* 通常時のスタイル */
  background-color: white;
  transition: background-color 0.3s ease; /* スムーズなアニメーション効果 */
}

#myElement:hover {
  /* マウスホバー時のスタイル */
  background-color: lightgray;
  border: 1px solid black;
}

この方法は、JavaScript でDOM操作を行うよりも効率的であり、アニメーションやトランジションも簡単に追加できます。

関連記事

参考文献

OpenJS Foundation (2022) .hover() | jQuery API Documentation