5

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

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

我只希望 Ctrl+Q 工作,而不是 Ctrl+Shift+Q、Ctrl+Alt+Q、Ctrl+Q+(其他一些键)

4

3 回答 3

4

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

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

于 2019-07-01T03:51:48.897 回答
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+Qctrl+alt+q),它将返回false!让我知道这是否能解决您的问题。干杯!!

于 2019-07-01T04:14:29.070 回答
-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);

您需要确保不会多次添加键,并且可能希望在失去焦点时清除阵列(因为使用控制它可能会在释放时失去焦点)

于 2019-07-01T03:51:34.957 回答