关于鼠标拖拽默认事件?

1.以下是一个简单的鼠标拖拽,碰撞检测,表面上可以正常运行,拖拽灰色div1 方块碰到 绿色方块div2 变色,但是我鼠标在点击div2 绿色方块不放并且移动到空白区域(document)松开,再去拖拽div1就无法拖动了,松开鼠标div1 一直跟随鼠标,在网上查了是系统默认事件,在div1点击事件加上return false 阻止默认事件就可以,但是这个是什么事件呢,一直搞不明白,来求教。

clipboard.png

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>碰撞检测p1</title>
    <style>
        *{margin:0;padding:0;}
        div{width:200px;height:200px;}
        #div1{position: absolute;left:0;top:0;background-color: darkgrey;}
        #div2{position: absolute;left:50%;top:50%;margin:-100px;background-color: darkseagreen;}
    </style>
</head>
<body>
    <div id="div1"></div>
    <div id="div2"></div>

    <script>

        var oDiv1 = document.getElementById("div1");
        var oDiv2 = document.getElementById("div2");

        oDiv1.onmousedown=function(ev){
            var oEvent = ev || event;
            oX = oEvent.clientX-oDiv1.offsetLeft;
            oY = oEvent.clientY-oDiv1.offsetTop;
         
            
            document.onmousemove = function(ev){
                var oEvent = ev || event;
                oDiv1.style.left = oEvent.clientX-oX+"px";
                oDiv1.style.top = oEvent.clientY-oY+"px";

                xLimit = oDiv1.offsetLeft + oDiv1.offsetWidth >= oDiv2.offsetLeft && oDiv1.offsetLeft <= oDiv2.offsetLeft + oDiv2.offsetWidth;
                yLimit = oDiv1.offsetTop + oDiv1.offsetWidth >= oDiv2.offsetTop && oDiv1.offsetTop <= oDiv2.offsetTop + oDiv2.offsetHeight;
            
                if(xLimit && yLimit){
                    oDiv2.style.backgroundColor = 'red';
                }else{
                    oDiv2.style.backgroundColor = 'darkseagreen';
                }
            
            }

            document.onmouseup = function(){
                document.onmousemove = null;
                document.onmouseup =null;
            }            

            //return false;
        }

    
    

    </script>
</body>
</html>
阅读 3.1k
2 个回答

console 可以发现,其中有次没有触发 mouseup。导致松开还可以拉着走。
然后就是拖不动的问题了。根据发现,应该是浏览器判断走系统拖动。mousedown的时候 ev.preventDefault();,禁止就好了。
https://www.lilnong.top/stati...

clipboard.png

默认是拉选了文字,拖拽搜索之类的功能吧

你给html加个user-select: none;估计也能解决

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题