003. DOM: Ejercicios / Eventos del teclado (Atajos)

En este ejercicio trabajaremos con los eventos del teclado, y conforme se vaya avanzando en los ejercicios, veremos más eventos. Vamos a ver como funciona la detección de cada una de las teclas del dispositivo, y veremos como hacer atajos personalizados, de tal manera que si creamos una aplicación interactiva tipo Photoshop Online, podemos crear nuestros propios shortcuts. En este capítulo aprenderemos a hacer shortcuts personalizados.

Principalmente el teclado tiene tres eventos:

  • keyup: este evento actúa cuando soltamos la tecla.
  • keydown: este evento actúa cuando presionamos la tecla.
  • keypress: este evento actúa mientras presionamos la tecla. Si mantenemos presionada la tecla el evento se seguirá ejecutando.

Nota: la propiedad keyCode va a ser una propiedad muy importante porque cada tecla tiene un código, y así es como vamos a poder identificar a las letras.

En este capítulo hemos modificado los archivos del capítulo anterior:

  • dom-ejercicios.html
  • index_dom.js

Y hemos creado un archivo nuevo

  • teclado.js

Veamos la sintaxis de estos 3 archivos, los archivos dom-ejercicios.css, menu_hamburguesa.js y reloj.js se mantienen invariables y se puede coger su código del capítulo anterior.

Sintaxis de dom-ejercicios.html.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Ejercicios del DOM</title>
    <link
      rel="stylesheet"
      href="https://cdnjs.cloudflare.com/ajax/libs/hamburgers/1.2.1/hamburgers.min.css"
    />
    <link rel="stylesheet" href="dom-ejercicios.css" />
  </head>
  <body>
    <header class="header">
      <h1>Ejercicios del DOM</h1>
    </header>
    <button class="panel-btn hamburger hamburger--vortex" type="button">
      <span class="hamburger-box">
        <span class="hamburger-inner"></span>
      </span>
    </button>
    <aside class="panel">
      <nav class="menu">
        <a href="#seccion1">Reloj Digital y Alarma Sonora</a>
        <a href="#seccion2">Eventos del teclado</a>
        <a href="#seccion3">Sección 3</a>
        <a href="#seccion4">Sección 4</a>
        <a href="#seccion5">Sección 5</a>
      </nav>
    </aside>
    <main>
      <section id="seccion1" class="section">
        <h2>Reloj Digital y Alarma Sonora</h2>
        <div id="reloj"></div>
        <div>
          <button id="activar-reloj">Iniciar Reloj</button>
          <button id="desactivar-reloj">Detener Reloj</button>
          <button id="activar-alarma">Iniciar Alarma</button>
          <button id="desactivar-alarma">Detener Alarma</button>
        </div>
      </section>
      <section id="seccion2" class="section">
        <h2>Eventos del teclado</h2>
      </section>
      <section id="seccion3" class="section">
        <h2>Sección 3</h2>
      </section>
      <section id="seccion4" class="section">
        <h2>Sección 4</h2>
      </section>
      <section id="seccion5" class="section">
        <h2>Sección 5</h2>
      </section>
    </main>
    <script src="index_dom.js" type="module"></script>
  </body>
</html>

Sintaxis de index_dom.js.

import hamburgerMenu from "./menu_hamburguesa.js";
import { digitalClock, alarm } from "./reloj.js";
import { shortcuts } from "./teclado.js";

const d = document;

d.addEventListener("DOMContentLoaded", (e) => {
  hamburgerMenu(".panel-btn", ".panel", ".menu a");
  digitalClock("#reloj", "#activar-reloj", "#desactivar-reloj");
  alarm("alarma.mp3", "#activar-alarma", "#desactivar-alarma");
});

d.addEventListener("keydown", (e) => {
  shortcuts(e);
});

Sintaxis de teclado.js.

const d = document;

export function shortcuts(e) {
  console.log(e.type);
  console.log(e.key);
  console.log(e.keyCode); // Código que las computadoras le dan a cada tecla
  console.log(`Ctrl: ${e.ctrlKey}`);
  console.log(`Alt: ${e.altKey}`);
  console.log(`Shift: ${e.shiftKey}`);
  console.log(e);
  if (e.key === "a" && e.altKey) {
    alert("Has lanzado una alerta con el teclado");
  }

  if (e.key === "c" && e.altKey) {
    confirm("Has lanzado una confirmación con el teclado");
  }

  if (e.key === "p" && e.altKey) {
    prompt("Has lanzado un aviso con el teclado");
  }
}
Scroll al inicio