>
> addEventListener("keydown", function(event) {
> if (event.keyCode == 86)
> document.body.style.background = "violet";
> });
> addEventListener("keyup", function(event) {
> if (event.keyCode == 86)
> document.body.style.background = "";
> });
>
Несмотря на название, >"keydown"
происходит не только тогда, когда на кнопку нажимают. Если нажать и удерживать кнопку, событие будет происходить каждый раз по приходу повторного сигнала от клавиши (key repeat). Если вам, к примеру, надо увеличивать скорость игрового персонажа, когда нажата кнопка со стрелкой, и уменьшать её, когда она отпущена – надо быть осторожным, чтобы не увеличить скорость каждый раз при повторе сигнала от кнопки, иначе скорость возрастёт очень сильно.
В примере упомянуто свойство >keyCode
объекта события. Так вы можете узнать, какая именно кнопка нажата или отпущена. К сожалению, не всегда очевидно, как преобразовать числовые коды в нужную кнопку.
Для цифр и букв код будет кодом символа Unicode, связанного с прописным символом, изображённым на кнопке. Метод строки >charCodeAt
даёт нам этот код.
>console.log("Violet".charCodeAt(0));
>// → 86
>console.log("1".charCodeAt(0));
>// → 49
У других кнопок коды менее предсказуемы. Лучший способ их выяснить – экспериментальный. Зарегистрировать обработчик, который записывает коды клавиш, и нажать нужную кнопку.
Кнопки-модификаторы типа Shift, Ctrl, Alt, и Meta (Command на Mac) создают события, как и нормальные кнопки. Но при разборе комбинаций клавиш можно выяснить, были ли нажаты модификаторы, через свойства >shiftKey
, >ctrlKey
, >altKey
, и >metaKey
событий клавиатуры и мыши.
>Нажмите Ctrl-Space для продолжения.
>
> addEventListener("keydown", function(event) {
> if (event.keyCode == 32 && event.ctrlKey)
> console.log("Продолжаем!");
> });
>
События >"keydown"
и >"keyup"
дают информацию о физическом нажатии кнопок. А если вам нужно узнать, какой текст вводит пользователь? Создавать его из нажатий кнопок – неудобно. Для этого существует событие >"keypress"
, происходящее сразу после >"keydown"
(и повторяющееся вместе с >"keydown"
, если клавишу продолжают удерживать), но только для тех кнопок, которые выдают символы. Свойство объекта события >charCode
содержит код, который можно интерпретировать как код Unicode. Мы можем использовать функцию >String.fromCharCode
для превращения кода в строку из одного символа.
>Переведите фокус на страницу и печатайте.
>
> addEventListener("keypress", function(event) {
> console.log(String.fromCharCode(event.charCode));