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