同时按下两个键时,在JavaScript中观察keydown事件

时间:2011-01-25 14:11:27

标签: javascript events keypress key simultaneous

我正在使用JavaScript开发一款浏览器游戏,玩家可以在四个方向上移动虚拟形象。

为了同时按下按键,我会观察keydownkeyup事件,并跟踪按下和释放的按键。这样我可以按对角线方向移动头像,例如同时按向上光标向右光标

这与使用此演示In Javascript, how do I tell if a user is pressing two keys at the same time?的StackOverflow http://jsbin.com/iloxi的回复相同。

然而,该解决方案存在一个缺陷,也可以在演示中重现。例如,按向下光标,然后也开始按光标向右。盒子现在向右下方移动。现在,在按下光标的同时释放光标右侧。盒子停止移动。应该发生的是盒子一直在向下移动。

问题是,只要按下光标右侧,JavaScript就会停止向向下发送 keydown个事件。一旦右移,就无法知道向下光标仍在被按下。

这个问题有解决方法吗?

更新:演示的问题是该框在keydownkeyup事件侦听器中移动。但是,一旦释放第二个密钥,就不会再为第一个密钥触发keydown个事件。我想知道是否有解决方案,或者这是标准的JavaScript行为?

要修复演示代码,您必须在超时迭代(move())中调用window.setTimeout()函数。

1 个答案:

答案 0 :(得分:1)

也许我误解了你,但是你不应该等待光标下的keyup事件吗?即按下光标直到你得到keyup为止 - 你不应该依赖发送的重复keydown事件。