如何Cmd通过JavaScript 捕获Mac的密钥?
如何Cmd通过JavaScript 捕获Mac的密钥?
Answers:
编辑:截至2019年,e.metaKey
是支持所有主流浏览器按照该MDN。
请注意,在Windows上,尽管该⊞ Windows密钥被认为是“元”密钥,但浏览器本身不会捕获该密钥。
这仅适用于MacOS /键盘上的命令键。
与Shift/ Alt/ 不同Ctrl,Cmd(“ Apple”)键不被认为是修饰键-相反,您应该在keydown
/上聆听/ keyup
并记录何时按下某个键,然后基于进行按下event.keyCode
。
不幸的是,这些关键代码取决于浏览器:
224
17
91
向左命令)或93
(向右命令)您可能对阅读文章JavaScript Madness:键盘事件感兴趣,我从中学到了这些知识。
keydown
事件,不适用于keyup
。
event.metaKey
如果您正在处理按键事件,则还可以查看事件的属性。为我做得很棒!您可以在这里尝试。
.metaKey
确实可以在最新的Firefox,Safari和Opera中运行。在Chrome浏览器中,.metaKey
在Control(而非Command)上触发。
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
基于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
}
}
在Mac上的Chrome,Safari,Firefox,Opera上进行了测试。请检查它是否适合您。
对于使用jQuery的人,有一个出色的插件可以处理关键事件:
为了捕获⌘+ 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"