如何跟踪按下哪些鼠标按钮

时间:2016-11-03 10:04:22

标签: javascript

我正在寻找一种方法来检测鼠标移动处理程序中按下了哪些鼠标按钮。

起初看起来很简单,我试过这个:

function mouseMove(event) {
    switch (event.buttons) {
        ...
    }            
}

这在我在Safari上测试之前一直运行良好。不幸的是,Safari不支持MouseEvent.buttons。

然后我尝试手动跟踪鼠标按钮状态,如下所示:

let isRightMouseButtonPressed = false;

function mouseDown(event) {        
    if (event.button === 2) {
        isRightMouseButtonPressed = true;
    }
}

function mouseUp(event) {        
    if (event.button === 2) {
        isRightMouseButtonPressed = false;
    }
}

document.addEventListener("mousedown", mouseDown);
document.addEventListener("mouseup", mouseUp);

这种方法的问题在于,如果在mousedown之后显示上下文菜单,并且在上下文菜单可见时释放按钮,则不会引发mouseup。

可能的解决方案可能是在contextmenu事件处理程序中设置isRightMouseButtonPressed = false。但有时会调用其他上下文菜单处理程序,通过调用event.preventDefault()来禁用上下文菜单。我找不到检测上下文菜单是否实际显示的方法。

因此,以下任何一项都会有所帮助:

  • 在Safari
  • 上添加对MouseEvent.buttons的支持的polyfill
  • 一种检测实际显示上下文菜单的方法(不仅仅是在引发contextmenu事件时)
  • 检测鼠标移动期间按下哪些鼠标按钮的其他方法

0 个答案:

没有答案