3

我注意到 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/

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

4

1 回答 1

2

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

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

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

于 2014-02-07T18:20:19.030 回答