我注意到 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/ http://jsfiddle.net/SYs5b/
(您必须在结果窗格中单击才能触发事件)
为了省钱,键盘制造商经常将许多按键放在同一条总线上。这可以防止同时按下键盘同一区域中的多个键。有时,它甚至可以阻止整个键盘上同时按下 2 个以上的键。通常,Shift、Ctrl 和 Alt 键不在此限制范围内,因此您可以按住 Shift 键并同时按其他 2 个键,它仍然可以正常工作。
即使是高端游戏键盘也通常具有类似的硬件限制,尽管上限要高得多,因此在正常游戏过程中不太可能达到该上限。
这也称为“重影”,即您按下的按键似乎没有注册。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)