Вернуться к уроку

Отследить одновременное нажатие

важность: 3

Создайте функцию runOnKeys(func, code1, code2, ... code_n), которая запускает func при одновременном нажатии клавиш со скан-кодами code1, code2, …, code_n.

Например, код ниже выведет alert при одновременном нажатии клавиш "Q" и "W" (в любом регистре, в любой раскладке)

runOnKeys(
  function() { alert("Привет!") },
  "Q".charCodeAt(0),
  "W".charCodeAt(0)
);

Демо в новом окне

Ход решения

  • Функция runOnKeys – с переменным числом аргументов. Для их получения используйте arguments.
  • Используйте два обработчика: document.onkeydown и document.onkeyup. Первый отмечает нажатие клавиши в объекте pressed = {}, устанавливая pressed[keyCode] = true, а второй – удаляет это свойство. Если все клавиши с кодами из arguments нажаты – запускайте func.
  • Возникнет проблема с повторным нажатием сочетания клавиш после alert, решите её.