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

时间:2019-07-01 03:37:44

标签: javascript

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

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

我只希望Ctrl + Q起作用,而不是Ctrl + Shift + Q,Ctrl + Alt + Q,Ctrl + Q +(另一些键)

3 个答案:

答案 0 :(得分:4)

只需确保没有按下其他三个修饰符:

document.addEventListener('keydown', function(event) {
  if (event.ctrlKey && event.keyCode == 81 && !(event.shiftKey || event.altKey || event.metaKey)) console.log("alert");
});

答案 1 :(得分:0)

以下代码可以解决您的问题(更新代码):

document.addEventListener("keydown", function (event) {
var map = [];
  onkeyup = function(e){
    map.push(e.key);
    console.log(map);
    if(map.length == 2){
      console.log("CTRL + Q was pressed",map.indexOf("q") > -1 && map.indexOf("Control") > -1)
    }

    onkeydown = function(e){
      // console.log(map);
    }
  }


});

如果与 ctrl 一起按下任何其他按钮(例如, ctrl + shift + Q ctrl + alt + q ),它返回 false !让我知道是否可以解决您的问题。干杯!

答案 2 :(得分:-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);

您将要确保不要多次添加键,并且可能要清除焦点丢失的数组(由于使用控件,释放时可能会失去焦点)