Aller au contenu

Événements keydown et keyup en JavaScript

Introduction aux événements clavier en JavaScript

Les événements clavier JavaScript permettent aux développeurs de créer des applications plus interactives et réactives. Dans cet article, nous plongeons en profondeur dans deux événements clavier principaux : keydown et keyup. Nous fournissons des exemples pratiques et concrets qui non seulement illustrent leur utilisation, mais vous aident également à les implémenter efficacement dans vos projets.

Comprendre keydown et keyup

L'événement keydown

L'événement keydown se produit lorsqu'un utilisateur appuie sur une touche du clavier. Il se déclenche avant que la touche ne commence réellement à saisir un caractère dans un champ. Cet événement est particulièrement utile pour gérer des actions où le moment de l'appui sur la touche est crucial, comme dans les jeux, les fonctionnalités d'accessibilité ou les contrôles interactifs.

Exemple d'événement keydown


html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Example of Keydown Event</title>
<style>
  .highlight { background-color: yellow; }
</style>
<script>
document.addEventListener('DOMContentLoaded', function () {
  const inputField = document.getElementById('inputField');
  inputField.addEventListener('keydown', function(event) {
    console.log('Key down:', event.key);
    if (event.key === "Enter") {
      this.classList.add('highlight');
      event.preventDefault(); // Prevents the default action of the enter key
    }
  });
});
</script>
</head>
<body>
<input type="text" id="inputField" placeholder="Press 'Enter' to highlight" />
</body>
</html>

Le code écoute un événement keydown sur le champ de saisie et vérifie si la touche appuyée est "Entrée". Si c'est le cas, il change la couleur de fond du champ de saisie en jaune (classe highlight) et empêche la soumission de formulaire par défaut ou d'autres actions généralement associées à la touche Entrée.

L'événement keyup

L'événement keyup se déclenche lorsqu'une touche est relâchée, après l'événement keydown (note : l'ancien événement keypress est déprécié et rarement utilisé dans le développement web moderne). Cet événement convient aux cas où vous devez savoir quand une pression sur une touche est terminée, comme lors de la mise à jour d'une interface utilisateur ou du contrôle de contenu multimédia.

Exemple d'événement keyup


html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Example of Keyup Event</title>
<style>
  .normal { background-color: transparent; }
  .active { background-color: lightgreen; }
</style>
<script>
document.addEventListener('DOMContentLoaded', function () {
  const textArea = document.getElementById('textArea');
  textArea.addEventListener('keyup', function(event) {
    console.log('Key up:', event.key);
    if (event.key === "Control") {
      this.classList.remove('active');
      this.classList.add('normal');
    }
  });
  textArea.addEventListener('keydown', function(event) {
    if (event.key === "Control") {
      this.classList.add('active');
    }
  });
});
</script>
</head>
<body>
<textarea id="textArea" rows="4" cols="50" placeholder="Press and release 'Control' to see the effect"></textarea>
</body>
</html>

Ce code fait changer la couleur de fond de la zone de texte en vert clair (classe active) lorsque la touche Control est enfoncée et le retourne à transparent (classe normal) lorsque la touche Control est relâchée.

Utilisations avancées des événements clavier en JavaScript

Exploiter la puissance des événements clavier comme keydown et keyup peut transformer des applications web ordinaires en plateformes hautement interactives, accessibles et efficaces. Ici, nous approfondissons leurs utilisations en les intégrant à des scénarios plus complexes tels que les raccourcis clavier personnalisés, les contrôles de jeu et les fonctionnalités d'accessibilité.

Implémentation de raccourcis clavier personnalisés

Les raccourcis clavier personnalisés permettent aux utilisateurs d'effectuer des actions rapidement, améliorant ainsi la productivité et l'expérience utilisateur. Cet exemple montre comment créer un simple raccourci clavier personnalisé (Ctrl + S) pour simuler une action de sauvegarde, qui pourrait être adapté pour déclencher des fonctionnalités spécifiques dans des applications réelles.

Exemple de raccourcis clavier personnalisés


html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Custom Hotkeys Example</title>
<script>
document.addEventListener('DOMContentLoaded', function () {
  let ctrlPressed = false;
  document.addEventListener('keydown', function(event) {
    if (event.key === "Control") {
      ctrlPressed = true;
    }
    // Use toLowerCase() for case-insensitive matching
    if (event.key.toLowerCase() === "s" && ctrlPressed) {
      alert('Saving your progress!');
      event.preventDefault(); // Prevent default to stop other actions like browser shortcuts
    }
  });

  document.addEventListener('keyup', function(event) {
    if (event.key === "Control") {
      ctrlPressed = false;
    }
  });
});
</script>
</head>
<body>
<p>Press <strong>Ctrl + S</strong> to simulate a save action.</p>
</body>
</html>

Gestion des contrôles de jeu

Les contrôles de jeu sont cruciaux pour les jeux basés sur le navigateur. Cet exemple fournit une implémentation simple des contrôles de flèches pour déplacer un objet joueur dans une zone de jeu, offrant une structure de base qui peut être étendue à des mécaniques de jeu plus complexes.

Exemple de contrôles de jeu


html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Game Control Example</title>
<style>
  #gameArea {
    width: 300px;
    height: 300px;
    border: 1px solid black;
    position: relative;
  }
  #player {
    width: 50px;
    height: 50px;
    background-color: red;
    position: absolute;
    top: 125px;
    left: 125px;
  }
</style>
<script>
document.addEventListener('DOMContentLoaded', function () {
  const player = document.getElementById('player');
  // Note: offsetLeft/Top don't account for container padding or scroll offsets.
  // For production, consider using getBoundingClientRect() or adding padding offsets.
  let posX = player.offsetLeft;
  let posY = player.offsetTop;
  document.addEventListener('keydown', function(event) {
    switch (event.key) {
      case "ArrowUp":
        posY -= 10;
        break;
      case "ArrowDown":
        posY += 10;
        break;
      case "ArrowLeft":
        posX -= 10;
        break;
      case "ArrowRight":
        posX += 10;
        break;
    }
    player.style.left = posX + 'px';
    player.style.top = posY + 'px';
  });
});
</script>
</head>
<body>
<div id="gameArea">
  <div id="player"></div>
</div>
<p>Use arrow keys to move the red square within the game area.</p>
</body>
</html>

Amélioration de l'accessibilité

Les améliorations d'accessibilité aident à rendre les applications web utilisables par les personnes handicapées. Cet exemple se concentre sur l'utilisation des événements keydown pour naviguer dans les liens à l'aide des touches fléchées du clavier, facilitant ainsi la navigation au clavier pour les utilisateurs ne pouvant pas utiliser de souris.

Exemple d'amélioration de l'accessibilité


html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Accessibility Navigation Example</title>
<script>
document.addEventListener('DOMContentLoaded', function () {
  const links = document.querySelectorAll('a');
  let currentFocus = 0;
  links[currentFocus].focus();
  document.addEventListener('keydown', function(event) {
    if (event.key === "ArrowDown") {
      currentFocus = (currentFocus + 1) % links.length;
      links[currentFocus].focus();
      event.preventDefault();
    }
    if (event.key === "ArrowUp") {
      currentFocus = (currentFocus - 1 + links.length) % links.length;
      links[currentFocus].focus();
      event.preventDefault();
    }
  });
});
</script>
</head>
<body>
<nav>
  <a href="#home">Home</a>
  <a href="#about">About</a>
  <a href="#services">Services</a>
  <a href="#contact">Contact</a>
</nav>
<p>Use the Up and Down arrow keys to navigate between the links.</p>
</body>
</html>

Ces exemples illustrent non seulement l'implémentation technique des événements keydown et keyup, mais démontrent également leurs applications pratiques pour améliorer l'interactivité et l'accessibilité des applications web. En intégrant ces fonctionnalités avancées, les développeurs peuvent créer des expériences utilisateur plus engageantes et inclusives.

Conclusion

Les événements clavier comme keydown et keyup sont indispensables pour créer des applications web dynamiques et interactives. En tirant parti de ces événements, les développeurs peuvent capturer les saisies des utilisateurs de manière transparente et y réagir en temps réel. Les exemples fournis dans cet article servent de point de départ pour intégrer ces événements clavier dans vos propres projets, vous aidant à améliorer à la fois la fonctionnalité et l'expérience utilisateur de vos applications web.

Pratique

Quels événements JavaScript utilise-t-il pour détecter les saisies au clavier ?

Trouvez-vous cela utile?

Aperçu dual-run — comparez avec les routes Symfony en production.