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



我正在尝试创建一个函数,该函数检查两个键是否同时释放以触发一个函数。这是我的代码,为了实现这一目标,我一直在摆弄它很长时间。

/* 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"]而不是直接读取事件。

最后一个问题是,在存储 keyup 事件的状态后,永远不会重置该状态。您需要一个超时来清除状态,以防止您描述的行为,即使您只点击"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")
}
}

最新更新