我正在使用 keydown 和 keyup 事件来检测按键操作。但是,当我按下 2 个或 3 个或更多键并按住它们时,大多数时候它不会识别之后按下的任何键,直到我停止按住这些键。我希望检测一次按下的任意数量的按键。
我看过的所有其他帖子似乎都只是关于如何映射一次按下的多个键,而不是关于我遇到的这个特定问题。
这就是我在代码中映射按键的方式:
// a map of press-able keys
const key = {
w: false,
a: false,
s: false,
d: false
};
document.addEventListener('keydown', function(e) {
if (key[e.key.toLowerCase()] != undefined) {
key[e.key.toLowerCase()] = true;
}
});
document.addEventListener('keyup', function(e) {
if (key[e.key.toLowerCase()] != undefined) {
key[e.key.toLowerCase()] = false;
}
});
例如,如果我同时按住W、A、S和D,大多数时候,它只会识别我按下的前2或3,而忽略最后1或2(key.a和key.w)可能是 true,但 key.s 和 key.d 可能是 false,即使它们被按下)。
这个实现有什么问题吗?或者我在搜索中找不到的 keydown 事件是否有限制?能够同时检测多个按键的潜在解决方案是什么?
键盘重影:是一种计算机键盘无法准确记录同时按键的现象,通常会影响游戏和打字体验。采用防重影技术通过确保正确识别多个按键输入来缓解此问题。
微软提供了一个交互式演示,你可以用它来测试你的键盘。 https://www.microsoft.com/applied-sciences/projects/anti-ghosting-demo