JavaScript: Obsługa klawiatury

Opublikowano: 13.11.2021 - tagi: JavaScript Klawiatura

Jak podpiąć się pod klawiaturę?

Żeby obsłużyć klawiaturę, w JavaScript posłużymy się zdarzenia

Obsługa klawiatury w JavaScript odbywa się za pomocą zdarzeń.

Mam następujące zdarzenia:

keydown — To zdarzenie jest wysłane kiedy użytkownik wciśnie klawisz na klawiaturze.

keyup — Zdarzenie zostaje wysłane kiedy zwolni wciśnięty klawisz.

Podpięcie obsługi zdarzeń klawiatury

Kod wygląda następująco:

document.addEventListener('keydown', (e) => {
  console.log('Keydown event code: ', e.code);
});

document.addEventListener('keyup', (e) => {
  console.log('Keyup event code: ', e.code);
});

Obiekt KeyboardEvent

Kiedy następuje interakcja użytkownika z klawiaturą, wysłane zostaje zdarzenie typu KeyboardEvent. Otrzymujemy je przy nasłuchiwaniu zdarzeń: keydown i keyup.

Ma następujące właściwości:

Atrybut code

Informuje jaki klawisz został wciśnięty.

document.addEventListener('keydown', (e) => {
  console.log('Keydown event code: ', e.code);
});

Dla liter dostaniemy wartość: KeyA, KeyB itd.

Dla liczb: Digit1, Digit2 itd.

Jeśli chcesz sprawdzić, czy został wciśnięty lewy lub prawy: Shift, Alt lub Ctrl skorzystaj z tego atrybutu.

Atrybut key

Także informuje jaki klawisz został wciśnięty, ale z tego atrybutu dowiem się znacznie więcej niż z code.

Jest to przydatne kiedy bierzemy pod uwagę, jaki język jest obsługiwany oraz układ klawiatury. Dodatkowo dzięki temu atrybutowi dowiemy się, czy została wciśnięta duża, czy mała litera.

document.addEventListener('keydown', (e) => {
  console.log('Keydown event code: ', e.key);
});

Dla liter dostaniemy wartość: a, b, c, d itd.

Dla liczb: 1, 2, 3, itd

Klawisze: Shift, Ctrl, Alt

Załóżmy, że chcemy sprawdzić, czy został wciśnięty któryś z klawiszy: Shift, Ctrl, Alt. Możemy to zrobić za pomocą specjalnych atrybutów: shiftKey, ctrlKey, altKey.

Jeśli któryś z tych klawiszy został wciśnięty przy odpowiednim atrybucie zostanie ustawiona wartość true.

Przykład dla przycisku Ctrl:

document.addEventListener('keydown', (e) => {
  if (e.ctrlKey && e.key === 'a') {
    console.log('Clicked CTRL + A!');
  }
});

Atrybut repeat

Jeśli chcemy się dowiedzieć czy wciśnięty klawisz dalej jest przytrzymywany możemy posłużyć się atrybutem repeat. Jeśli ma wartość true to znaczy, że dany klawisz cały czas jest wciśnięty:

document.addEventListener('keydown', (e) => {
  console.log(`key: ${e.key} is repeat: ${e.repeat}`);
});