Как справиться с нажатием клавиш C + / на JS (комбинация клавиш) и вызвать какую-то функцию? - PullRequest
1 голос
/ 12 февраля 2020
const cKeycode = 67; 
const SlashKeyCode = 191; 
document.onkeyup = function(e){  
 var e = e || window.event;   
 if(e.keyCode==cKeycode && e.which == SlashKeyCode) {
   alert("C+/ pressed");
   return false;   
  }
}

Я только что попробовал этот и многие другие варианты, но я не могу справиться с этим. Может быть, кто-то знает лучший способ

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Ваш код не работает, потому что событие передает только одну клавишу за раз (исключая такие клавиши, как ctrl и alt). Чтобы обойти это, мы можем сохранить, если нажата любая из клавиш, а затем проверить это, когда нажата вторая клавиша. Этот метод работает независимо от того, нажимает ли пользователь c , затем /, или если он нажимает / , а затем c.

const keys = ["c", "/"];
var pressedKey = -1;
document.onkeydown = function(e){  
 var e = e || window.event;
 let key = e.key;
 if (keys.indexOf(key) > -1) {
  if (pressedKey === -1) pressedKey = key;
  else if (pressedKey !== key) console.log("C + / pressed");
 }
}

document.onkeyup = function(e) {
  let key = e.key;
  if (key === pressedKey) pressedKey = -1;
}
0 голосов
/ 12 февраля 2020

Событие onkeyup не возвращает набор нажатых клавиш - оно просто возвращает по одной клавише за раз. Кроме того, onkeyup просто срабатывает, если вы действительно отпускаете клавишу, поэтому, если вы хотите знать, когда нажаты две клавиши, вам нужно использовать событие onkeydown .

Для этого создайте глобальную логическую переменную, которая указывает, действительно ли нажата первая кнопка, и если она есть, проверьте, нажата ли вторая клавиша.

Вот пример. Для простоты я использую клавиши a и e.

const AKeycode = 65;
const EKeycode = 69;
let AKeycodeDown = false;
let EKeycodeDown = false;
document.onkeydown = function(e) {
  if (e.keyCode == AKeycode) {
    AKeycodeDown = true;
  }
  if (e.keyCode == EKeycode) {
    EKeycodeDown = true;
  }
  if (AKeycodeDown && e.keyCode == EKeycode || EKeycodeDown && e.keyCode == AKeycode) {
    AKeycodeDown = false;
    EKeycodeDown = false;
    alert("A+E pressed");
  }
}

document.onkeyup = function(e) {
  if (e.keyCode == AKeycode) {
    AKeycodeDown = false;
  }
  if (e.keyCode == EKeycode) {
    EKeycodeDown = false;
  }
}
...