组合 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.ctrlKey
和 e.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..
我正在尝试使用键盘快捷键在我的应用程序上显示搜索栏。
虽然使用 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.ctrlKey
和 e.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..