如何检查键盘上的两个按钮是否同时为 keyup 以触发一个功能

how to check for two buttons on keyboard to be keyup at the same time in order to fire one function

我正在尝试创建一个功能来检查是否同时释放两个键以触发一个功能。这是我的代码,为了实现这个目标,我花了难以置信的时间来摆弄它。

/* cn is used to stop the check after the two keys are 
pressed once at the same time. I am not really using this 
at the moment, but I will.
*/
var cn = true;
var pressed = {};

function try_buttons(event) {
  if(cn === true) {
    pressed[event.key] = true;
    if(pressed["Shift"] && event.key === "p") {
        console.log("worked");
    }
  }
}

它没有达到预期目的,而是在按下 shift 至少一次后 运行 秒,之后的任何其他时间只需按“p”即可 运行 函数.

看起来你存储了每个 keyup 事件的键,这很好。但是我看到了三个问题。

首先,在某些情况下,您的条件不成立,因为当您按 shift + p 时,p 的键实际上是 P(大写)。所以你需要 .toLowercase() 钥匙。

第二个问题是您应该使用 pressed["p"] 而不是直接读取事件。

最后一个问题是,在存储按键事件的状态后,您永远不会重置状态。您需要一个清除状态的超时,以防止您描述的行为,即使您只按下“p”键,您也可以获得 console.log("worked") 到 运行。

这应该可以处理您要实现的目标:

document.addEventListener('keyup', try_buttons)

let pressed = {}

function try_buttons(event) {
  pressed[event.key.toLowerCase()] = true

  setTimeout(function() {pressed[event.key.toLowerCase()] = false}, 200)

  if (pressed['shift'] && pressed['p']) {
    console.log("works")
  }
}