Как захватить Mac Cmd с помощью JavaScript?
Как захватить ключ командной строки Mac через JavaScript?
Ответ 1
В отличие от Shift/Alt/Ctrl, клавиша Cmd ("Apple") не считается клавишей-модификатором - вместо этого вы должны слушать keydown
/keyup
и записывать при нажатии клавиши а затем в депрессии на основе event.keyCode
.
К сожалению, эти коды клавиш зависят от браузера:
- Firefox:
224
- Опера:
17
- Браузеры WebKit (Safari/Chrome):
91
(левая команда) или93
(правая команда)
Возможно, вам будет интересно прочитать статью JavaScript Madness: Keyboard Events, из которой я узнал об этом.
Ответ 2
Вы также можете посмотреть на атрибут event.metaKey
в событии, если вы работаете с событиями нажатия клавиш. Работал чудесно для меня! Вы можете попробовать это здесь.
Ответ 3
Я обнаружил, что вы можете обнаружить ключ команды в последней версии 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
Ответ 4
Основываясь на данных Ilya, я написал библиотеку 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. Проверьте, работает ли он для вас.
Ответ 5
Для этого есть javascript-lib: keymaster.js
(без зависимостей, таких как jquery)
Ответ 6
Для людей, использующих jQuery, есть отличный плагин для обработки ключевых событий:
Горячие клавиши jQuery на GitHub
Для захвата ⌘ + S и Ctrl + S я использую это:
$(window).bind('keydown.ctrl_s keydown.meta_s', function(event) {
event.preventDefault();
// Do something here
});
Ответ 7
Вот как я это сделал в 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 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()
Ответ 8
если вы используете Vuejs, просто сделайте это с помощью плагина vue-shortkey, все будет просто
https://www.npmjs.com/package/vue-shortkey
v-shortkey="['meta', 'enter']"·
@shortkey="metaEnterTrigged"