javascript - 为什么这个 Javascript 无法识别鼠标抬起?

标签 javascript jquery

我有以下 Javascript 代码。如果在 div 内同时按下鼠标中键和鼠标右键,它们将移出浏览器,同时仍然按下两个按钮,然后释放其中一个按钮。这是公认的。但如果你释放另一个,这是不被识别的。是否有一种方法可以识别第二个鼠标按钮的释放,或者当鼠标移回浏览器窗口时能够找出哪些按钮处于向上/向下状态,以便可以更新状态。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    </head>

    <body>
        <div style="height:250px;background-color: pink"> </div>
        <script type="text/javascript">
        var doc = $(document);
        var buttons = [ false, false, false ];
        function mouseDown(e) {
            buttons[e.which - 1] = true;
            console.log(buttons);
            e.preventDefault();
        }

        function mouseUp(e) {
            buttons[e.which - 1] = false;
            console.log(buttons);
            e.preventDefault();
        }

        doc.on("mousedown", mouseDown);
        doc.on("mouseup", mouseUp);
        </script>
    </body>  
</html>

编辑

代码是here

编辑2

或者有人知道为什么这是不可能的以及任何表明这是不可能的引用文献。

最佳答案

您可以使用文档的 mouseenter 和事件的 buttons 属性来确定重新输入文档时哪个按钮按下了:

doc.on("mouseenter", function(e) { 
    console.log("mouseenter: " + e.target + " buttons: " + e.buttons);
   //if (Object.prototype.toString.call(e.target) == '[object HTMLHtmlElement]') {
        if (e.buttons == 1){
             //left button
        }
        if (e.buttons == 2){
             //right button
        }
        if (e.buttons == 4){
             //middle
        }
    }
});

参见this link对于鼠标事件的 buttons 属性。

更新:

上面的链接:代表一个或多个按钮的数字。对于按下多个按钮的情况,这些值将被合并。 所以

if (e.buttons == 1){
    //left button
}
else if (e.buttons == 2){
    //right button
}
else if (e.buttons == 4){
    //middle
}
else if (e.buttons == 3){
    //left and right
}
else if (e.buttons == 6){
    //middle and right
}
else if (e.buttons == 7){
    //all 3
}

更新2:

第二次鼠标松开未注册的原因是在第一次鼠标松开后,浏览器停止监听 mousemove 事件。使用下面的这些处理程序尝试问题中的场景。鼠标移动将持续触发,直到您松开第一个按钮。一旦您释放第一个按钮,就不会再触发移动。我以为我可以在鼠标抬起时使用 setCapturefocus 来使窗口继续监视鼠标,但它不起作用。

window.addEventListener("mouseup", function( event ) {
      console.log("window mouse up");
      //window.focus();
      //event.target.setCapture(true);
  }, false);

window.addEventListener("mousemove", function( event ) {
      console.log("window mouse move");
  }, false);

关于javascript - 为什么这个 Javascript 无法识别鼠标抬起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26627551/

相关文章:

javascript - 在自定义指令的链接函数中使用 $document.off

javascript - 使用 droppable 函数显示 div

javascript - 使用ajax加载后youtube spf无法工作

jquery - jQuery Change() 是否适用于隐藏的表单元素

javascript - 尝试自动播放某些音频时,我不一致地收到 "play() failed because the user didn' t 首先与文档交互”错误

javascript - SCORM:单击演示文稿中的按钮时在 SCO 之间跳转

javascript - 有没有更好的方法在 ng-grid 中切换进出编辑模式?

javascript - 渲染后如何替换 Angular 组件标签?

javascript - 如何检查样式组件内的状态?

javascript - 以编程方式为移动应用程序获取靠近纬度和经度的多个街道名称