账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    js:为什么mouseenter事件会不停的触发?
    24
    0

    1、项目中遇到的需求:鼠标进入某个元素,有个小简介,所以在鼠标停留位置需要显示一个弹出框。我绑定的是mouseenter 和 mouseleave事件,鼠标进入元素显示弹出框,离开元素隐藏弹出框。但是鼠标进入元素,在元素里面滑动的时候,弹出框会不停的闪现,特别是鼠标从元素左上角往右下角方向滑动时,弹出框闪现的更厉害。
    2、自己上网搜的时候,很多都是说mouseenter和mouseover、mouseleave和mouseout的区别,我懂它们之间的区别,我觉得此bug应该与这个无关吧?
    3、上代码,求大神给与解答疑惑,谢谢了~~~

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>悬停弹出框</title>
        <style>
            #contain{position: relative;}
            #d1,#d2{
                width:50px;
                height:50px;
                background:pink;
                position:absolute;
                text-align:center;
                line-height:50px;
                top:200px;
                left:400px;
            }
            #d2{background:lightblue;left:700px;}
            #popupBox{
                width:200px;
                height:200px;
                border:1px solid #000;
                background:#ddd;
                position:absolute;
                display:none;
            }
        </style>
    </head>
    <body>
        <div id="contain">
            <div id="d1">1</div>
            <div id="d2">2</div>
        </div>
        <!-- 弹出框 -->
        <div id="popupBox"></div>    
        <script src="http://code.jquery.com/jquery-latest.js"></script>
        <script>
            //获取鼠标位置
            function mouseCoords(e){
                e= e || window.event; 
                if(e.pageX || e.pageY){ 
                    return {x:e.pageX, y:e.pageY}; 
                } else{
                    return {
                        x:e.clientX + document.body.scrollLeft - document.body.clientLeft, 
                        y:e.clientY + document.body.scrollTop - document.body.clientTop 
                    }
                }
            }
            // 绑定事件
            $("#contain").on("mouseenter","div",function(e){
                $("#popupBox").show();
                var mousePos = mouseCoords(e); 
                $("#popupBox").css({
                    "top":mousePos.y,
                    "left":mousePos.x
                })
            }).on("mouseleave","div",function(){
                $("#popupBox").hide();
            });
        </script>
    </body>
    </html>
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 随性洒脱 普通会员 1楼

      在JavaScript中,当元素的mouseenter事件被触发时,浏览器会创建一个新的event对象并将其传递给相应的处理函数。在处理函数中,我们可以使用event.target属性来获取触发mouseenter事件的元素,然后检查这个元素是否在我们想要处理的范围内。

      如果这个元素不在我们想要处理的范围内,那么我们就不会执行任何操作,这就是为什么mouseenter事件会不停地触发。但是,如果我们想要阻止这个元素的默认行为,例如移动到鼠标离开的位置,我们可以使用event.stopPropagation()方法来阻止事件的默认传播。

      例如,如果我们有一个包含多个<li>元素的列表,我们想要阻止鼠标在列表中移动时,列表中的所有li元素都会被移动到鼠标离开的位置,我们可以这样做:

      javascript document.addEventListener('mouseenter', function(event) { event.stopPropagation(); // 在这里处理鼠标离开的事件 });

      这将阻止鼠标在列表中移动时,列表中的所有li元素都会被移动到鼠标离开的位置。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部