如何通过JavaScript捕获Mac的Cmd键?
当前回答
下面是我在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()
其他回答
如果你使用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
});
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)。
你也可以查看事件。如果您正在处理keydown事件,则事件上的metaKey属性。对我来说效果非常好!你可以在这里试试。
我发现在最新版本的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浏览器
推荐文章
- 在React Native中使用Fetch授权头
- 为什么我的球(物体)没有缩小/消失?
- 如何使用jQuery检测页面的滚动位置
- if(key in object)或者if(object. hasownproperty (key)
- 一元加/数字(x)和parseFloat(x)之间的区别是什么?
- angularjs中的compile函数和link函数有什么区别
- 删除绑定中添加的事件监听器
- 很好的初学者教程socket.io?
- HtmlSpecialChars在JavaScript中等价于什么?
- React: 'Redirect'没有从' React -router-dom'中导出
- 如何在React中使用钩子强制组件重新渲染?
- 我如何使用Jest模拟JavaScript的“窗口”对象?
- 我如何等待一个承诺完成之前返回一个函数的变量?
- 在JavaScript中根据键值查找和删除数组中的对象
- 使嵌套JavaScript对象平放/不平放的最快方法