如何通过JavaScript捕获Mac的Cmd键?
当前回答
对于使用jQuery的人,有一个很好的插件来处理关键事件:
GitHub上的jQuery热键
对于捕获⌘+S和Ctrl+S,我使用这个:
$(window).bind('keydown.ctrl_s keydown.meta_s', function(event) {
event.preventDefault();
// Do something here
});
其他回答
你也可以查看事件。如果您正在处理keydown事件,则事件上的metaKey属性。对我来说效果非常好!你可以在这里试试。
编辑:截至2019年,根据MDN,所有主要浏览器都支持e.m akey。
注意,在Windows上,虽然win win键被认为是“元”键,但它不会被浏览器捕获。
这仅适用于MacOS/键盘上的命令键。
与Shift/Alt/Ctrl不同,Cmd(“Apple”)键不被认为是修饰键,相反,您应该根据event.keyCode监听keydown/keyup并记录何时按下键,然后按下键。
不幸的是,这些关键代码依赖于浏览器:
Firefox: 224 歌剧:17 WebKit浏览器(Safari/Chrome): 91(左命令)或93(右命令)
您可能有兴趣阅读“JavaScript疯狂:键盘事件”这篇文章,我是从那里学到这些知识的。
我发现在最新版本的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浏览器
var element = //the DOM element to listen for the key on.
element.onkeyup = function(e) {
if(e.metaKey) {
//command key was pressed
}
}
基于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上进行了测试。请检查是否适合您。
推荐文章
- 检测用户何时离开网页的最佳方法?
- 当“模糊”事件发生时,我如何才能找到哪个元素的焦点去了*到*?
- React不会加载本地图像
- 如何将Blob转换为JavaScript文件
- 在另一个js文件中调用JavaScript函数
- 如何在svg元素中使用z索引?
- 如何求一个数的长度?
- 跨源请求头(CORS)与PHP头
- 如何用Express/Node以编程方式发送404响应?
- parseInt(null, 24) === 23…等等,什么?
- JavaScript变量声明在循环外还是循环内?
- 元素在“for(…in…)”循环中排序
- 在哪里放置JavaScript在HTML文件?
- 什么时候.then(success, fail)被认为是承诺的反模式?
- 从浏览器下载JSON对象作为文件