Kann dieser Code kürzer umgesetzt werden?

1 Antwort

Bei nur zwei Eingabefeldern könnte man sich die Abfrage im Event Handler, welches Eingabefeld nun vorliegt, auch sparen und stattdessen zwei Event Listener ansetzen. Die Eingabefelder müssten dafür allerdings individuell selektierbar sein (bspw. durch eine Klasse weap und eine Klasse stick).

Die Abfrage bzgl. der Backspace-Taste braucht man nur einmal.

let timeout;

function handleKeyDownEvent(evt, keys) {
  clearTimeout(timeout);

  if (evt.keyCode === 8 && keys.length) {
    keys.pop();
  }
  else if (evt.keyCode >= 48 && evt.keyCode <= 90) {
    keys.push(evt.key);
  }

  timeout = setTimeout(() => {
    /* ... */
  }, 500);
}

const keyWeap = [];
const keyStick = [];
document.querySelector(".weap").addEventListener("keydown", evt => handleKeyDownEvent(evt, keyWeap));
document.querySelector(".stick").addEventListener("keydown", evt => handleKeyDownEvent(evt, keyStick));