纯JavaScript,仅检测Ctrl + Q快捷键

Fre*_*cer 5 javascript

我想使用快捷方式来处理Javascript(而非JQuery或任何Javascript库)中的任务。例如,我想使用Ctrl + Q编写警报。我的问题是仅使用Ctrl + Q,其他键(例如Ctrl + Q +其他键)的组合将无法处理警报。我能怎么做?

document.addEventListener('keydown', function(event){
  if(event.ctrlKey && event.keyCode == 81) console.log('alert');
});
Run Code Online (Sandbox Code Playgroud)

我只希望Ctrl + Q起作用,而不是Ctrl + Shift + Q,Ctrl + Alt + Q,Ctrl + Q +(其他键)

Set*_*eth -1

您需要跟踪按下了哪些键keydown以及使用 释放了哪些键keyup,然后,当按下新键时,您将仅检查当前是否按下了 Ctrl 和 Q。

像这样的东西应该有效:

var keysPressed = [];

function onPressOrRelease(event) {
  if (event.type === "keydown") {
    if (!keysPressed.includes(event.keyCode))
      keysPressed.push(event.keyCode)
  } else if (event.type === "keyup")
    keysPressed.splice(keysPressed.indexOf(event.keyCode), 1);

  let ctrlQPressed = keysPressed.includes(81) && keysPressed.includes(17) && !keysPressed.some(a => a !== 81 && a !== 17)
  if (ctrlQPressed)
    console.log("pressed");
}

document.addEventListener("keydown", onPressOrRelease);
document.addEventListener("keyup", onPressOrRelease);
Run Code Online (Sandbox Code Playgroud)

您需要确保键不会被多次添加,并且可能需要在焦点丢失时清除数组(因为使用控件,释放时可能会失去焦点)