【问题标题】:Javascript "keydown" with mutiple key wont work properly [duplicate]带有多个键的Javascript“keydown”将无法正常工作[重复]
【发布时间】:2015-10-11 21:06:06
【问题描述】:

我正在制作一个键盘映射器(它基本上允许我们检查同时按下的多个键),但我遇到了一个问题。

问题是它不会检测到所有被按下的键。比如:we pressed 10 keys but the code says that only 7 keys are being pressed,比如we pressed 6 keys but the code says that only 4 keys are being pressed,是的,很随机……

那么解决方法是什么?

注意:

  1. 我已经尝试过addEventListener等方法
  2. 我已经尝试过其他人制作的键盘映射器,但他们都有同样的问题(至少我遇到过的问题)
  3. 我愿意接受其他方法(除了这个)
  4. 我是新手,所以...是的 :p

谢谢!

代码如下:

var obj = {};
$(document).ready(function() {
  
  document.addEventListener("keydown", function(event) {
    obj[event.keyCode] = true;
    $("#output").text("" + JSON.stringify(obj));
  });
  
  $(document).keyup(function() {   
    obj[event.keyCode] = false;
    $("#output").text("" + JSON.stringify(obj));   
  });

});
<!DOCTYPE HTML>
<html>

<head>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
  <link href="style.css" rel="stylesheet" type="text/css">
</head>

<body>
  <p>"PRESS ANY KEY"</p>
  <p>KeyDown:
    <p id="output"></p>
  </p>
  <br/>
</body>

</html>

【问题讨论】:

  • 问题从键盘本身开始:许多常见的键盘不会注意同时按下的键超过三个或四个。
  • 如果您的键盘是通过 USB 连接的,那么您只能按 6 个键和几个修饰键 IIRC。具有 n 键翻转和 PS/2 的键盘没有此限制。 n键翻转相关测试:here.

标签: javascript keyboard-events keydown keyup


【解决方案1】:

问题不在于 JavaScript,而在于键盘本身。它被称为键盘重影,有一个 great article from Microsoft itself 解释它。

“重影”是同时按下多个键时某些键盘键不起作用的问题。没有出现在计算机上或似乎已经消失的按键被称为“幻影”。在大多数键盘上,即使是一些明确标榜为“防重影”的键盘,也会发生许多三个组合键。想象一下在玩你最喜欢的电子游戏时,不能同时对角线跑和开火(比如同时按 a、w 和 g)。这是大多数现有键盘的内部设计的结果,如下所述。

您的代码是正确的,可以与支持多键的键盘一起使用。

【讨论】:

    猜你喜欢
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 2021-02-04
    相关资源
    最近更新 更多