我正在寻找一种方法来检测鼠标移动处理程序中按下了哪些鼠标按钮。
起初看起来很简单,我试过这个:
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()
来禁用上下文菜单。我找不到检测上下文菜单是否实际显示的方法。
因此,以下任何一项都会有所帮助: