jQuery - mouseenterイベント、mouseoverイベント、mouseleaveイベント、mouseoutイベント

公開日:2018-12-28

1. 概要

マウスが要素の中に入った時に mouseenterイベント、mouseoverイベントが発生し、
要素の外に出た時に mouseleaveイベント、mouseoutイベントが発生します。
mouseenter と mouseover、mouseleave と mouseout の違いは、
親要素と子要素の間でマウスを行き来した時に、イベントが発生するかどうかです。

ソース
//マウスが要素の中に入った時
$(セレクタ).on("mouseenter", function(e) {
  処理;
});

//マウスが要素の外に出た時
$(セレクタ).on("mouseleave", function(e) {
  処理;
});

//マウスが要素の中に入った時(親子間の行き来でも発生する)
$(セレクタ).on("mouseover", function(e) {
  処理;
});

//マウスが要素の外に出た時(親子間の行き来でも発生する)
$(セレクタ).on("mouseout", function(e) {
  処理;
});

2.1 サンプル mouseenter, mouseleave

ソース
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>jQuery</title><style>body{color:#fff; background-color:#000;}</style></head>
<body style="padding:0px; margin:0px;">
  <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>

  <div style="padding:20px; padding-top:20px;">
    <div id="main" style="width:100px; height:90px; background-color:lightgray; color:black;">parent
      <div id="child" style="width:50px; height:50px; background-color:gray;">child</div>
    </div>
  </div>

  <div id="log" style="padding-left:20px;"></div>

  <script>

    $("#main").on("mouseenter", function(e) {
      log(e.target.id + ":mouseenter");
    });

    $("#main").on("mouseleave", function(e) {
      log(e.target.id + ":mouseleave");
    });

    //ログ出力
    var no = 1;
    function log(msg) {
      $("#log").append ('<div>' + no++ + ":" + msg + '</div>');
      if ($("#log div").length > 10) $("#log div:first").remove();
    }

  </script>
</body></html>

マウスをグレーの枠の中に入れると、ログが出力されます。
マウスを親要素と子要素の間で行き来しても、ログが出力されません。
実行結果:画面

2.2 サンプル mouseover, mouseout

ソース
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>jQuery</title><style>body{color:#fff; background-color:#000;}</style></head>
<body style="padding:0px; margin:0px;">
  <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>

  <div style="padding:20px; padding-top:20px;">
    <div id="main" style="width:100px; height:90px; background-color:lightgray; color:black;">parent
      <div id="child" style="width:50px; height:50px; background-color:gray;">child</div>
    </div>
  </div>

  <div id="log" style="padding-left:20px;"></div>

  <script>

    $("#main").on("mouseover", function(e) {
      log(e.target.id + ":mouseover");
    });

    $("#main").on("mouseout", function(e) {
      log(e.target.id + ":mouseout");
    });

    //ログ出力
    var no = 1;
    function log(msg) {
      $("#log").append ('<div>' + no++ + ":" + msg + '</div>');
      if ($("#log div").length > 10) $("#log div:first").remove();
    }

  </script>
</body></html>

マウスをグレーの枠の中に入れると、ログが出力されます。
マウスを親要素と子要素の間で行き来しても、ログが出力されます。
実行結果:画面