LoginSignup
10
2

More than 1 year has passed since last update.

【JavaScript】mouseover, mouseout, mouseenter, mouseleaveの違いについて図解で理解する。

Last updated at Posted at 2020-12-05

※当方駆け出しエンジニアのため、間違っていることも多々あると思いますので、ご了承ください。また、間違いに気付いた方はご一報いただけると幸いです。

mouseover, mouseout => 対象ノードへの接触を監視
mouseenter, mouseleave => 対象ノードへの出入りを監視

このような入れ子構造のノードがあったとします。

<div id = "parent">
  <div id = "child">
  </div>
</div>

図でイメージするとこんな感じとします。

IMG_7155 2.jpg

今、id="parent"を監視対象としているとします。

マウスがparentノードに入ってきた場合。
当然、mouseenterは発火します。
またparentとマウスは接触した状態となったので、mouseoverも発火します。
IMG_7154.jpg

マウスがchildノードに入ってきた場合。
マウスとparentとは接触しない状態と変化したため、mouseoutが発火します。
なお、parentノードからマウスが出た訳ではないのでmouseleaveは発火しません。
この、「parentノードからマウスが出た訳ではない」という解釈ですが、parentを家、childeを部屋と考えたらイメージしやすいかもしれません。
玄関から家に入り、さらに部屋に入った時、「家から出た」とはならないですよね。

IMG_7156.jpg
マウスがchildノードから出た場合。
マウスとparentとは接触する状態と変化したため、mouseoverが発火します。
当然、mouseenterは発火しません。
部屋か出た時、「家に入った」とは言わないですよね
IMG_7157.jpg

マウスがparentから出た場合。
当然、mouseleaveは発火します。
またparentとマウスは接触しない状態となったので、mouseoutも発火します。
IMG_7158.jpg

いってらっしゃい。マウス。

10
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
2