Общий обзор алгоритма будет следующим:
Сохраните переменную типа Set
, которая будет содержать все в настоящий момент нажатые клавиши. Всякий раз, когда вы получаете событие keydown
/ keyup
, обновите этот набор, добавив / удалив любую нажатую / отпущенную клавишу. Прикрепите обработчики событий как можно выше - например, к тегу <body>
, чтобы вы могли отлавливать все, что происходит на вашей странице.
Затем в конце события keydown
вам следует проверьте, содержит ли переменная ТОЧНО те клавиши, которые требуются вашему сочетанию клавиш. Если они это сделают, запустите действие. На практике у вас, вероятно, будет длинный список возможных сочетаний клавиш. Проверьте их все. Возможно, вам также понадобятся дополнительные проверки, например, некоторые ярлыки могут быть активны, только когда определенный элемент управления находится в фокусе, или когда что-то находится в нужном состоянии или что-то в этом роде.
Как вариант, вы можете запустить действие не когда клавиши нажаты, а когда они отпущены. В этом случае не запускайте действие немедленно, а сделайте какое-то замечание в другой переменной, что такая-то комбинация была нажата. Затем подождите, пока все ключи не будут отпущены (набор пуст), а затем запустите действие. Если между ними были нажаты какие-то другие клавиши, очистите эту заметку и проверьте, не следует ли активировать другую комбинацию. Сохраните это в переменной note и продолжайте ждать.