0

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

/* 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”即可运行该功能。

4

1 回答 1

1

看起来您存储了每个 keyup 事件的密钥,这很好。但我看到三个问题。

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

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

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

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

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")
  }
}
于 2021-04-15T00:48:53.263 回答