Події клавіатури
Існує дві основні події клавіатури: keydown
і keyup
. На відміну від інших,
події клавіатури обробляються на документі, а не на конкретному елементі.
Об'єкти подій клавіатури походять від базового класу KeyboardEvent
.
document.addEventListener("keydown", event => {
console.log("Keydown: ", event);
});
document.addEventListener("keyup", event => {
console.log("Keyup: ", event);
});
Натискаючи клавішу, спочатку відбувається keydown
, після чого - keyup
, коли
клавішу відпустили. На практиці переважно обробляють тільки подію keydown
,
оскільки вона відбувається швидше за keyup
, і користувач раніше бачить
результат натискання. Події keydown
і keyup
спрацьовують при натисканні
будь-якої клавіші, включно зі службовими (Ctrl
, Shift
, Alt
, Escape
тощо).
Раніше була ще одна подія клавіатури - keypress
. Більшість постів на форумах і
блогах все ще можуть її використовувати, але будьте обережні - вона застаріла і
підтримка у нових браузерах може припинитися в будь-який момент.
Властивості key
і code
Властивість key
повертає символ, згенерований натисканням клавіші, враховуючи
стан клавіш-модифікаторів, наприклад, Shift
, а також поточну мову. Властивість
code
повертає код фізичної клавіші на клавіатурі і не залежить від мови.
document.addEventListener("keydown", event => {
console.log("key: ", event.key);
console.log("code: ", event.code);
});
Наведіть фокус у вікно прикладу, клікнувши по ньому мишкою, відстеження подій
клавіатури знаходиться на елементі document
. Надрукуйте щось на клавіатурі і
подивіться результат.
Клавіші-модифікатори
Для обробки комбінації клавіш, наприклад Ctrl
+ s
або будь-якої іншої, на
об'єкті події є властивості ctrlKey
, altKey
, shiftkey
і metaKey
, що
зберігають булеве значення, яке сигналізує про те, чи була затиснута
клавіша-модифікатор.
document.addEventListener("keydown", event => {
event.preventDefault();
if ((event.ctrlKey || event.metaKey) && event.code === "KeyS") {
console.log("«Ctrl + s» or «Command + s» combo");
}
});
Деякі комбінації клавіш можуть конфліктувати з поведінкою браузера за
замовчуванням. Наприклад, Ctrl
+ d
або Command
+ d
робить закладку.
Потрібно намагатися проектувати систему комбінацій сторінки таким чином, щоб
вона не перетиналася із вбудованою у браузері. Але, у крайньому разі, поведінку
за замовчуванням можна скасувати, викликавши метод event.preventDefault()
.
Не так давно, замість властивостей key
і code
, використовували властивість
keyCode
. Більшість постів на форумах і блогах все ще можуть використовувати
її, але будьте обережні - вона застаріла, не використовуйте властивість
keyCode
.