Как получить Cmdключ Mac с помощью JavaScript?
Как получить Cmdключ Mac с помощью JavaScript?
Ответы:
EDIT: По состоянию на 2019 год , e.metaKey
будет поддерживаться на всех основных браузерах , как в соответствии с MDN .
Обратите внимание, что в Windows, хотя ⊞ Windowsключ считается мета-ключом, он не собирается перехватываться браузерами как таковой.
Это только для клавиш управления на MacOS / клавиатурах.
В отличие от Shift/ Alt/ Ctrl, Cmdклавиша («Apple») не считается клавишей-модификатором - вместо этого вы должны слушать keydown
/ keyup
и записывать, когда клавиша нажата, а затем нажата на основе event.keyCode
.
К сожалению, эти коды клавиш зависят от браузера:
224
17
91
(левая команда) или 93
(правая команда)Возможно, вам будет интересно прочитать статью « Безумие JavaScript: события клавиатуры» , из которой я узнал об этом.
keydown
события, а не keyup
.
Вы также можете посмотреть на event.metaKey
атрибут события, если вы работаете с событиями нажатия клавиш. Работал чудесно для меня! Вы можете попробовать это здесь .
.metaKey
действительно работает в последних Firefox, Safari и Opera. В Chrome .metaKey
срабатывает при управлении (не по команде).
keydown
но НЕ для keyup
или keypress
.
Я обнаружил, что вы можете обнаружить командную клавишу в последней версии Safari (7.0: 9537.71), если она нажата в сочетании с другой клавишей. Например, если вы хотите обнаружить ⌘ + x:, вы можете обнаружить клавишу x И проверить, установлен ли для event.metaKey значение true. Например:
var key = event.keyCode || event.charCode || 0;
console.log(key, event.metaKey);
При самостоятельном нажатии x это будет выводить 120, false
. При нажатии ⌘ + x, он выведет120, true
Кажется, это работает только в Safari, а не в Chrome
Основываясь на данных Ильи, я написал библиотеку Vanilla JS для поддержки клавиш-модификаторов на Mac: https://github.com/MichaelZelensky/jsLibraries/blob/master/macKeys.js
Просто используйте это так, например:
document.onclick = function (event) {
if (event.shiftKey || macKeys.shiftKey) {
//do something interesting
}
}
Протестировано на Chrome, Safari, Firefox, Opera на Mac. Пожалуйста, проверьте, работает ли он для вас.
Для людей, использующих jQuery, есть отличный плагин для обработки ключевых событий:
Горячие клавиши jQuery на GitHub
Для захвата ⌘+ Sи Ctrl+ Sя использую это:
$(window).bind('keydown.ctrl_s keydown.meta_s', function(event) {
event.preventDefault();
// Do something here
});
Вот как я это сделал в AngularJS
app = angular.module('MM_Graph')
class Keyboard
constructor: ($injector)->
@.$injector = $injector
@.$window = @.$injector.get('$window') # get reference to $window and $rootScope objects
@.$rootScope = @.$injector.get('$rootScope')
on_Key_Down:($event)=>
@.$rootScope.$broadcast 'keydown', $event # broadcast a global keydown event
if $event.code is 'KeyS' and ($event.ctrlKey or $event.metaKey) # detect S key pressed and either OSX Command or Window's Control keys pressed
@.$rootScope.$broadcast '', $event # broadcast keyup_CtrS event
#$event.preventDefault() # this should be used by the event listeners to prevent default browser behaviour
setup_Hooks: ()=>
angular.element(@.$window).bind "keydown", @.on_Key_Down # hook keydown event in window (only called once per app load)
@
app.service 'keyboard', ($injector)=>
return new Keyboard($injector).setup_Hooks()
если вы используете Vuejs, просто сделайте это с помощью плагина vue-shortkey, все будет просто
https://www.npmjs.com/package/vue-shortkey
v-shortkey="['meta', 'enter']"·
@shortkey="metaEnterTrigged"