我正在尝试使用键盘快捷键在应用程序上显示搜索栏。
尽管使用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,然后我将其替换了。
但是它仍然不起作用。
有人可以提供对此问题的见解/想法吗?
谢谢
答案 0 :(得分:2)
DateTime
和e.ctrlKey
是KeyboardEvent对象上的特殊属性,包含这些按钮的状态。
e.altKey
属性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");
答案 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。