组合键按下功能不适用于Mac Keyboard

时间:2019-06-07 07:47:32

标签: javascript jquery macos keyboard-shortcuts

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

尽管使用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,然后我将其替换了。

但是它仍然不起作用。

有人可以提供对此问题的见解/想法吗?

谢谢

2 个答案:

答案 0 :(得分:2)

DateTimee.ctrlKeyKeyboardEvent对象上的特殊属性,包含这些按钮的状态。

  

e.altKey

属性e.keyCode === 90 && e.keyCode === 17 && e.keyCode === 91不能一次是三个不同的值。


我对Apple的经验很少,但我认为您必须手动跟踪这些按钮的状态。

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

e.keyCode

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

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

答案 1 :(得分:2)

尝试: 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。