是否可以获取鼠标按钮4、5等?

Gre*_*ims 6 javascript mouselistener

简而言之,有什么方法可以检测JavaScript中的其他鼠标按钮按下情况吗?其余的鼠标输入未对此进行记录,因此我想它不在标准实现中。

是否有其他方法(例如库)可以启用额外的鼠标按钮?

Zak*_*rki 5

是的,您可以这样做,请检查MouseEvent.button,请参见下面的示例,该示例将检测 3 和 4 个按钮的点击。

一些定点设备提供或模拟更多按钮。要表示此类按钮,必须将每个连续按钮的值加倍(在二进制系列 8、16、32 中,...),如https://www.w3.org/TR/DOM-Level-3- 中所述事件/#events-mouseevents

var whichButton = function (e) {
    // Handle different event models
    var e = e || window.event;
    var btnCode;

    if ('object' === typeof e) {
        btnCode = e.button;

        switch (btnCode) {
            case 3:
                console.log('Browser Back button clicked.');
            break;

            case 4:
                console.log('Browser Forward button clicked.');
            break;

            default:
                console.log('Unexpected code: ' + btnCode);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
<button onmouseup="whichButton(event);" oncontextmenu="event.preventDefault();">Click with mouse...</button>
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,使用 Chrome、IE、Edge、Firefox 或 Opera 这似乎并不实际工作。 (4认同)
  • 正如 switch 语句的内容所暗示的那样,鼠标按钮 3 和 4 已经在 Chrome、Firefox 和 Edge 中绑定到浏览器的后退和前进操作(我认为还有更多)。我创建了 [this CodePen](https://codepen.io/anon/pen/LqxoMy) 以在 `var e` 声明下添加一个 `e.preventDefault();` 以抑制绑定的浏览器操作。我已经验证了这在 Chrome 71 中有效,但不幸的是,在 FireFox 65 和 Edge 42 中,`e.preventDefault()` 不会抑制绑定的浏览器操作。有谁知道在所有浏览器中抑制它的方法? (2认同)

小智 -1

var whichButton = function (e) {
    // Handle different event models
    var e = e || window.event;
    var btnCode;

    if ('object' === typeof e) {
        btnCode = e.button;

        switch (btnCode) {
            case 3:
                console.log();
            break;

            case 4:
                console.log();
            break;

            default:
                console.log('Unexpected code: ' + btnCode);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)