使用javascript读取多个同时键盘输入

时间:2014-02-07 18:05:52

标签: javascript html html5 keyboard keyboard-input

我在JavaScript中注意到键盘输入有些奇怪的行为。我可能会遗漏一些非常明显的东西,但是有哪些规则可以同时按下哪些键?

我正在使用布尔变量来保存四个键中的每个键的状态,如下所示,这允许许多同时按键(硬件允许):

var up = false, left = false, right = false, space = false;

function keydown(e) {
    if (e.keyCode == 32)
        space = true;
    if (e.keyCode == 38)
        up = true;
    if (e.keyCode == 37)
        left = true;
    if (e.keyCode == 39)
        right = true;
}

function keyup(e) {
    if (e.keyCode == 32)
        space = false;
    if (e.keyCode == 38)
        up = false;
    if (e.keyCode == 37)
        left = false;
    if (e.keyCode == 39)
        right = false;
}

在两台机器上我尝试过以下jsfiddle允许你同时向上和向右按空格,但不是空格,例如向上和向左。在这两台机器上,它在Chrome,FF和IE中也是如此。在第三台机器上它可以完美地工作,我可以同时握住所有4个键。

现在可能这与硬件有关,但我的主要问题是为什么左右键的操作有所不同?它似乎不一致,我确信它的存在方式是有道理的。

http://jsfiddle.net/SYs5b/

(您必须在结果窗格中单击才能触发事件)

1 个答案:

答案 0 :(得分:2)

为了省钱,键盘制造商经常在同一总线上放许多键。这可以防止同时按下键盘的同一区域中的多个键。有时它甚至可以防止整个键盘上的两个以上的键同时被按下。 shift,ctrl和alt键通常不在此限制范围内,因此您可以按住shift并同时按下其他2个键,它仍然可以正常工作。

即使是高端游戏键盘通常也有类似的硬件限制,但上限要高得多,因此在正常的游戏过程中不太可能达到。

这也称为“重影”,当您按下的按键似乎没有注册时。