Javascript检查键盘状态

Javascript检查键盘状态,javascript,dom-events,key-bindings,Javascript,Dom Events,Key Bindings,我正在制作一个简单的Javascript游戏,需要能够检查某些键是否被按下。我已经尝试绑定到onkeydown事件,但我遇到的问题有两个:首先,它不允许我检查是否在任何时候按下了多个键。第二,它在按下键后暂停,然后开始发送垃圾邮件 在我的代码中,我可以有一个事件,也可以有一个函数,每毫秒检查一次键是否被按下。鉴于这是一个游戏,我对这两种方法都没有问题。您可以同时使用onkeydown和onkeydup: var pressed={}; element.onkeydown=function(e){

我正在制作一个简单的Javascript游戏,需要能够检查某些键是否被按下。我已经尝试绑定到
onkeydown
事件,但我遇到的问题有两个:首先,它不允许我检查是否在任何时候按下了多个键。第二,它在按下键后暂停,然后开始发送垃圾邮件


在我的代码中,我可以有一个事件,也可以有一个函数,每毫秒检查一次键是否被按下。鉴于这是一个游戏,我对这两种方法都没有问题。

您可以同时使用onkeydown和onkeydup:

var pressed={};
element.onkeydown=function(e){
     e = e || window.event;
     pressed[e.keyCode] = true;
}

element.onkeyup=function(e){
     e = e || window.event;
     delete pressed[e.keyCode];
}

使用此代码,您可以将每个按下的按键代码存储在
pressed
变量中,然后在松开按键时将其删除。因此,当你需要知道按下了哪些键时,你可以用for(…in…)在按下的对象中循环。

我刚才写了一篇关于这个主题的博客文章


请参见

您是否考虑过使用javascript库来处理绑定?它将帮助您动态设置keyup/keydown,以确保游戏保持响应。我还没有看到任何库处理是否按下键的检查。我目前使用jQuery,但我认为它们没有这种功能。如果你能推荐一个这样的图书馆,我将非常感激。谢谢!这正是我要找的。如果你按[Alt/Ctrl]+[Tab],一个向下键的“keyup”将不会触发。通过添加“模糊”事件来避免此行为:
window.addEventListener('blur',()=>pressed={},false)