mouseenter、mouseleave、mouseover和mouseout是常用来判断鼠标移出和移入的事件句柄,虽然功能上差不多,但是细节却有不同的地方。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>随风丶逆风</title> <style> div{ margin: 0 auto; } .parentBox{ height: 200px; width: 300px; background-color: #f00; } .childBox{ height: 200px; width: 200px; background-color: #00f; } </style> </head> <body> <div class="parentBox"> <div class="childBox"></div> </div> </body> <script> window.onload=function(){ let parent = document.getElementsByClassName("parentBox")[0]; parent.addEventListener("mouseenter",()=>console.log("Mouse Enter")); parent.addEventListener("mouseleave",()=>console.log("Mouse Leave")); parent.addEventListener("mouseover",()=>console.log("Mouse Over")); parent.addEventListener("mouseout",()=>console.log("Mouse Out")); } </script> </html>
上面是页面代码,在浏览器中打开页面,显示为下图:
使用鼠标从左侧向右侧横向滑动,那么在控制台会输出下面的信息:
为了方便浏览,我将控制台的8个输出标记了序号,下面来说明一下(红色盒子为父盒子,蓝色盒子为子盒子):
①② 首先移入红色盒子范围内,触发了进入盒子的mouseover和mouseenter事件,且mouseover触发时间的优先于mouseenter;
③④ 然后当移入到蓝色盒子时,触发了离开红色盒子的mouseout事件,同时触发了蓝色盒子mouseover进入事件,说明mouseover不仅在父元素会触发,在子元素也会触发;
⑤⑥ 再然后又移入红色盒子时,触发了蓝色盒子的mouseout事件和红色盒子的mouseover事件,同理说明mouseout不仅在父元素会触发,在子元素也会触发;
⑦⑧ 最后移出红色盒子时,触发mouseout和mouseleave事件。
从上面的例子中可以得出下面几个结论:
1.mouseover与mouseout成对,mouseenter与mouseleave成对(连它们都成对了。。。默默画个圈)
2.mouseover触发优先级高于mouseenter,mouseout触发优先级高于mouseleave
3.在父元素上绑定mouseover和mouseout事件,子元素同样也会触发;而父元素绑定mouseenter和mouseleave事件只对父元素有效,子元素不会触发
部分内容参考https://www.cnblogs.com/xpl-blogs/p/6528012.html