Прежде всего, я не могу рекомендовать использовать ⌘ + в качестве ярлыка, так как это уже что-то значит в Safari (а именно, увеличить страницу). Кто-то может захотеть, чтобы это все еще работало нормально. В зависимости от того, что вы создаете, это может иметь смысл, но не переопределяйте сочетания клавиш по умолчанию, если вы не уверены.
В любом случае: Ключевые события сложны , часто потому, что свойства keyCode / charCode /, которые не всегда совпадают с правильной буквой, поэтому String.fromCharCode
не всегда будут давать вам правильную строку. keyIdentifier
иногда лучше смотреть, но не всегда (например, его коды буквенных клавиш всегда прописные).
То, что я делал в прошлом (и я не уверен, что это лучший способ сделать это, но он работает нормально), это вместо этого прослушивать события keydown и keyup и клавиши-модификаторы «stack» , То есть всякий раз, когда клавиша нажата, проверьте, является ли она клавишей-модификатором (то есть, является ли она cmd, ctrl, alt или shift). Если это так, добавьте его в «стек» модификаторов. Сделайте обратное на keyup; если выпущенный ключ был модификатором, удалите его из стека.
Теперь, вернувшись в обработчик keydown, если ключ не был клавишей-модификатором, вы можете отправить событие keydown (которое, в отличие от события нажатия клавиши, будет иметь довольно надежное свойство keyIdentifier
для проверки), и стек модификаторов вместе с каким-то другим обратным вызовом, который возьмет его оттуда.
В вашем случае такой обратный вызов проверит, что ключ cmd находится в стеке и что keyIdentifier для события keydown - "U + 002B" (который является кодом Unicode для +
).
Я собрал пример jsfiddle того, о чем я говорю. Если вы щелкнете на панели «Результат» (чтобы убедиться, что она сфокусирована) и нажмете ⌘ +, она должна отобразить комбинацию клавиш, которую вы использовали, и написать «Успех!» ниже. В противном случае он просто покажет комбинацию клавиш. На моей клавиатуре знак «плюс» доступен напрямую, поэтому я вижу комбинацию клавиш «⌘ +». Но если вам нужно сдвинуть, чтобы набрать знак плюс, вы должны увидеть «⇧⌘ +».
Это обобщенный кусок кода, который подходит для обработки сочетаний клавиш в Safari / Mac, поэтому вы можете использовать его, если хотите. Вы захотите добавить несколько слушателей событий, чтобы сбросить стек модификаторов для событий размытия и тому подобное. В идеале, стек модификаторов будет сбрасываться автоматически, когда вы отпускаете ключи, но поскольку что-то может привести к потере фокуса браузером или наблюдаемым элементом / окном / документом, события keyup не будут обрабатываться, а отпущенные ключи будут выиграны. не могут быть удалены из стека. Поэтому проверьте наличие размытия.