同时按下六个以上的键 JavaScript

Pressing more than six keys simultaneously with JavaScript

在开发一个简单的游戏时,我注意到当我同时按下键盘上的六个键时,在 Web 应用程序的文档上捕捉 keydown 和 keyup 事件开始变得不可预测。使用以下代码片段,列出的键在六个键后停止显示,有时按下的键更少。

<!DOCTYPE html>
<html>
<head>
  <title>Keyboard test</title>
</head>
<body>
  <div id="target"></div>

<script>

var target = document.getElementById('target');
var keyInventory = {};
var REFRESH_RATE = 1000 / 60;

document.addEventListener('keyup', function(e) {
  keyInventory['Key code ' + e.keyCode] = false;
});

document.addEventListener('keydown', function(e) {
  keyInventory['Key code ' + e.keyCode] = true;
});

setInterval(function() {
  target.innerHTML = JSON.stringify(keyInventory).replace(/,/g, '<br />');
}, REFRESH_RATE);

</script>
</body>
</html>

浏览器是否阻止了某些组合,或者浏览器是否使用 'keyup' 和 'keydown' 事件在 6 处划线?是否需要防止某些默认行为?所有浏览器都一样吗?有没有办法允许超过六个任意组合键注册?

这很可能是您的键盘有问题。 IIRC,USB 只能支持 6 个同时按键。 (不是 USB 键盘,我的意思是 字面上的 USB 协议)。由于此限制,许多消费类键盘也仅支持 6 个同时键。

如果您想要更多(又名 N-KRO),您将需要购买支持该功能的键盘,并且很可能会使用 PS/2。因为,除了对 USB 协议的奇怪破解之外,PS/2 是唯一支持无限按键的东西。

所以实际上你的记忆可能是正确的。由于大多数键盘过去都是 PS/2 它们都(理论上)可以支持 N-KRO。