微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在鼠标移动事件监听器中停止onmouseup函数

如何解决如何在鼠标移动事件监听器中停止onmouseup函数

我有以下代码。可以看出,我有一个事件侦听器,当在div(“ myDiv”)上按下鼠标按钮时会触发该事件侦听器。如果移动了鼠标,div就会移动,然后释放鼠标按钮时,会在控制台中记录一条消息。问题是,此后每次,即使鼠标不在div上,如果释放鼠标按钮,相同的消息也会记录到控制台。我设法通过“ document.onmousemove = null”关闭了onmousemove函数。但是,如何停止永久执行mouseup功能呢?仅适用于JavaScript。谢谢

var myDiv = document.getElementById("div");

myDiv.addEventListener("mousedown",function(event) {

  document.onmousemove = function(event) {
    myDiv.style.left = event.clientX + "px";
  };

  document.onmouseup = function(event) {
    document.onmousemove = null;
    
    console.log("you moved the div");

  };

});
#div {
width: 100px;
height: 100px;
position: absolute;
background-color: rgba(0,50,150,1);
}
<div id="div"></div>

解决方法

将功能移出第一个侦听器,并在需要时添加/删除侦听器:

myDiv.addEventListener("mousedown",function(event) {
    // Add the listeners
    document.addEventListener('mousemove',mouseMove);
    document.addEventListener('mouseup',mouseUp);
});

function mouseMove(event) {
    myDiv.style.left = event.clientX + "px";
};

function mouseUp (event) {
    console.log("you moved the div");
    // Remove the listeners
    document.removeEventListener('mousemove',mouseMove);
    document.removeEventListener('mouseup',mouseUp);
};
,

最简单的方法是移动事件监听器后将其删除:

var myDiv = document.getElementById("div");

myDiv.addEventListener("mousedown",function(event) {

  document.onmousemove = function(event) {
    myDiv.style.left = event.clientX + "px";
  };

  document.onmouseup = function(event) {
    document.onmousemove = null;
    
    console.log("you moved the div");
    document.onmouseup = null;
  };

});
#div {
width: 100px;
height: 100px;
position: absolute;
background-color: rgba(0,50,150,1);
}
<div id="div"></div>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。