mouseenter、mouseleave、mouseover和mouseout的区别

    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

猜你喜欢

转载自blog.csdn.net/sinat_36521655/article/details/80237213
今日推荐