如何检测和映射同时按下的多个按键

问题描述 投票:0回答:1

我正在使用 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 事件是否有限制?能够同时检测多个按键的潜在解决方案是什么?

javascript keydown
1个回答
0
投票

键盘重影:是一种计算机键盘无法准确记录同时按键的现象,通常会影响游戏和打字体验。采用防重影技术通过确保正确识别多个按键输入来缓解此问题。

微软提供了一个交互式演示,你可以用它来测试你的键盘。 https://www.microsoft.com/applied-sciences/projects/anti-ghosting-demo

© www.soinside.com 2019 - 2024. All rights reserved.