【问题标题】:Mouse event "mousemove" gets fired when pressing and releasing mouse buttons按下和释放鼠标按钮时触发鼠标事件“mousemove”
【发布时间】:2016-10-10 15:33:03
【问题描述】:

正如标题所说,我注意到在我的画布上mousemove 在按下/释放鼠标按钮时被触发,即使我实际上并没有移动鼠标。问题是,在释放按钮的情况下,它会在 mouseup! 之后被触发!

这是正常行为吗?
如何修复/解决方法?我真的需要我的mouseup 最后触发,或者mousemove 在释放按钮时根本不触发; setTimeout 不是一个合法的解决方案。

示例:https://jsfiddle.net/h40mm4mj/1/ 就这么简单:如果您打开控制台并在画布中单击,您会注意到在mouseup 之后记录了mousemove

canvas.addEventListener("mousemove", function (e) {
  console.log("mousemove");
}, false);
canvas.addEventListener("mouseup", function (e) {
  console.log("mouseup");
}, false);

编辑:刚刚测试过,它只发生在 Chromium、Windows 上。

【问题讨论】:

  • 忘了补充一下,我已经尝试使用所有可能的 useCapture 组合添加事件处理程序,但它们的结果都相同。
  • 请出示相关代码,以便我们重现您的问题。
  • 刚刚尝试使用 div 元素,但我无法仅按一个按钮触发 mousemove 事件。使用 Firefox 45
  • 该死的,这是一大段代码。给我一点时间给你缩小!
  • JSFiddle 上的演示也可以。

标签: javascript dom-events mouseevent mousemove mouseup


【解决方案1】:

我遇到了同样的问题。解决比较以前的鼠标位置和新的鼠标位置:

function onMouseDown (e) {
    mouseDown = { x: e.clientX, y: e.clientY };
    console.log("click");
}

function onMouseMove (e) {
    //To check that did mouse really move or not
    if ( e.clientX !== mouseDown.x || e.clientY !== mouseDown.y) {
        console.log("move");
    }
}

取自这里:What to do if "mousemove" and "click" events fire simultaneously?

【讨论】:

    猜你喜欢
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    相关资源
    最近更新 更多