Функция комбинации Keydown не работает для клавиатуры Mac - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь отобразить панель поиска в моем приложении с помощью сочетаний клавиш.

Хотя сочетания клавиш отлично работают на клавиатуре 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();
            }
        });
    }

Изначально у меня не было '||'условие в операторе «Если».Первое условие работает при использовании клавиатуры Windows.Когда я проверил на Mac, это не сработало.Таким образом, я должен был положить в «||»состояние.

Для условия MacOS изначально я использовал коды клавиш - 59,55 и 6, как показано в этой ссылке - https://eastmanreference.com/complete-list-of-applescript-key-codes

При проверке на компьютере Mac, обнаруженные коды клавиш были - 90,91 и 17, которые я тогда заменил.

Но все равно это не работает.

Может ли кто-нибудь высказать свое мнение / мысли по этому вопросу?

Спасибо

Ответы [ 2 ]

2 голосов
/ 07 июня 2019

попробуйте это: metaKey - это ключ cmd на Mac. 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 не поддерживается на старых браузерах ..

2 голосов
/ 07 июня 2019

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]
...