如何通过JavaScript捕获Mac的Cmd键?


当前回答

如果你使用vue-shortkey插件,一切都会很简单

https://www.npmjs.com/package/vue-shortkey

v-shortkey="['meta', 'enter']"·
@shortkey="metaEnterTrigged"

其他回答

keyCode和现在已弃用,因此建议避免在这里使用这些答案。

现在的一种方法是使用事件参数上的key属性,该参数随DOM keyup和keypress事件而来。下面是一个简单的例子:

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

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

如果你需要更细粒度地了解哪个元键被按下了,你可以使用事件上的代码属性,它可以是MetaLeft或MetaRight,这取决于按下的物理元键(cmd)。

基于Ilya的数据,我编写了一个香草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, Mac上的Opera上进行了测试。请检查是否适合您。

我发现在最新版本的Safari(7.0: 9537.71)中,如果命令键与另一个键同时按下,就可以检测到它。例如,如果你想检测⌘+x:,你可以检测x键并检查if事件。metaKey设置为true。例如:

var key = event.keyCode || event.charCode || 0;
console.log(key, event.metaKey);

当单独按x时,输出120,false。当按⌘+x时,它将输出120,true

这似乎只适用于Safari浏览器,而不适用于Chrome浏览器

如果你使用vue-shortkey插件,一切都会很简单

https://www.npmjs.com/package/vue-shortkey

v-shortkey="['meta', 'enter']"·
@shortkey="metaEnterTrigged"

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

GitHub上的jQuery热键

对于捕获⌘+S和Ctrl+S,我使用这个:

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