如何通过JavaScript捕获Mac的命令键?

Dat*_*eed 162 javascript dom-events

如何Cmd通过JavaScript 捕获Mac的密钥?

Ily*_*nov 221

Shift/ Alt/ 不同Ctrl,Cmd("Apple")键不被视为修饰键 - 相反,您应该按下e.metaKey/ keydown并在按下键时记录,然后按下keyup.

不幸的是,这些密钥代码依赖于浏览器:

  • 火狐: event.keyCode
  • 歌剧: 224
  • WebKit浏览器(Safari/Chrome):( 17左命令)或91(右命令)

您可能有兴趣阅读文章JavaScript疯狂:键盘事件,我从中学习了这些知识.

  • 似乎event.metaKey在Safari,Firefox和Chrome的当前版本中工作就像一个魅力.IMO这是很明显的解决方案. (53认同)
  • 在回应Miroslav的评论时,请注意,它仅适用于** keydown` **事件,而不适用于`keyup`。 (3认同)
  • 回应 @nachocab 的评论: e.key === 'Meta' 适用于 keydown 和 keyup。所以这个可以用来代替 e.metaKey (3认同)
  • 要知道 Opera 现在也属于 Webkit 类别。我认为只听 91、93 和 224 就可以完成工作。顺便说一下,17 是 Ctrl。老 Opera 没有区分 Cmd 和 Ctrl 吗?? (2认同)

Sun*_*nny 203

event.metaKey如果您正在使用keydown事件,还可以查看事件的属性.为我精彩的工作!你可以在这里试试.

  • 我认为这个技巧(即使在Chrome中)也适用于`keydown`但不适用于`keyup`或`keypress`. (18认同)
  • `.metaKey`确实适用于最新的Firefox,Safari和Opera.在Chrome中,`.metaKey`在Control(不在命令)上触发. (8认同)

cry*_*pay 13

我发现如果与另一个键一起按下,你可以在最新版本的Safari(7.0:9537.71)中检测到命令键.例如,如果要检测⌘+ x:,则可以检测x键并检查event.metaKey是否设置为true.例如:

var key = event.keyCode || event.charCode || 0;
console.log(key, event.metaKey);
Run Code Online (Sandbox Code Playgroud)

当按下它自己的x时,这将输出120, false.按⌘+ x时,将输出120, true

这似乎只适用于Safari - 而不是Chrome


Mic*_*sky 11

基于Ilya的数据,我在Mac上编写了一个支持修改键的Vanilla JS库:https://github.com/MichaelZelensky/jsLibraries/blob/master/macKeys.js

只需像这样使用它,例如:

document.onclick = function (event) {
  if (event.shiftKey || macKeys.shiftKey) {
    //do something interesting
  }
}
Run Code Online (Sandbox Code Playgroud)

在Chrome,Safari,Firefox,Mac上的Opera上测试过.请检查它是否适合您.


Jam*_*ner 9

keyCode现已which弃用因此建议避免使用此处的答案。

现在执行此操作的一种方法是使用DOM和事件key附带的事件参数的属性。下面是如何执行此操作的一个简单示例:keyupkeypress

document.onkeypress = (event) => {
    if (event.key === 'Meta') {
        console.log("Mac or Windows key was pressed!");
    } else {
        console.log("Another key was pressed")
    }
}
Run Code Online (Sandbox Code Playgroud)

这将在 Mac 上按下按键时触发cmd请参阅 MDN 文档上的元)。这里唯一需要注意的是,对于支持它的用户键盘/操作系统,它也会在按下 Windows 按键时触发。

如果您需要更详细地了解按下了哪个元键,您可以使用code事件属性,该属性可以是MetaLeftMetaRightcmd取决于按下了哪个物理元键 ( )。


Koe*_*en. 7

对于使用jQuery的人来说,有一个很好的插件来处理关键事件:

GitHub上的jQuery热键

为了捕获+ SCtrl+ S我正在使用这个:

$(window).bind('keydown.ctrl_s keydown.meta_s', function(event) {
    event.preventDefault();
    // Do something here
});
Run Code Online (Sandbox Code Playgroud)