组合 Keydown 功能不适用于 Mac 键盘

Combination Keydown function not working for Mac Keyboard

我正在尝试使用键盘快捷键在我的应用程序上显示搜索栏。

虽然使用 Windows 键盘时键盘快捷键可以完美运行,但当我使用带有 Mac 键盘的 Mac 机器时,代码会失败。

以下是我编写的函数 -

var osName = "Unknown OS";
if (navigator.appVersion.indexOf("Win") != -1) osName = "Windows";
if (navigator.appVersion.indexOf("Mac") != -1) osName = "MacOS";

function showSearchBarOnKeyPress() {
        $(document).keydown(function (e) {
            if ((e.ctrlKey && e.altKey && e.key === "z") || (osName === "MacOS" && e.keyCode === 90 && e.keyCode === 17 && e.keyCode === 91)) {
                searchBarIsShown();
            }
        });
    }

最初我没有'||' 'If' 语句中的条件。第一个条件在使用 Windows 键盘时有效。当我检查 Mac 时,它不起作用。所以我不得不输入'||'健康)状况。

对于 MacOS 条件,最初我使用了键码 - 59,55 和 6,如本参考资料所示 - https://eastmanreference.com/complete-list-of-applescript-key-codes

在检查 Mac 机器时,检测到的键码是 - 90,91 和 17,然后我将其替换。

但是还是不行。

有人可以就此问题提供 insights/thoughts 吗?

谢谢

e.ctrlKeye.altKey 是包含这些按钮状态的 KeyboardEvent 对象的特殊属性。

e.keyCode === 90 && e.keyCode === 17 && e.keyCode === 91

属性 e.keyCode 不能同时是三个不同的值。


我对苹果没有什么经验,但我想你必须手动跟踪这些按钮的状态。

一个简单的状态管理器是:

const keyDown = Object.create(null);
$(document).on("keydown keyup", e => keyDown[e.keyCode] = e.type === "keydown");

所以现在您可以一次检查所有三个按钮:

keyDown[90] && keyDown[17] && keyDown[91]

试试这个: metaKey 是 mac 上的 cmd 键。 altKey 是 mac.

上的选项键
var osName = "Unknown OS";
if (navigator.appVersion.indexOf("Win") != -1) osName = "Windows";
if (navigator.appVersion.indexOf("Mac") != -1) osName = "MacOS";

function showSearchBarOnKeyPress() {
    $(document).keydown(function (e) {
    var modifier = (navigator.appVersion.indexOf("Mac") != -1) ? e.ctrlKey : e.metaKey;
        if (modifier && e.altKey && e.key === "z") {
            searchBarIsShown();
        }
    });
}

请注意,旧浏览器支持 metaKey..