Saltar al contenido principal
Codigo Heroe
Tarea anterior
Introducción a los eventos8/21
A la lista de tareas
  1. 1. Eventos del usuario
  2. 2. Añadir un manejador de eventos
  3. 3. Sintaxis de los manejadores
  4. 4. Acciones predeterminadas
  5. 5. Funciones como argumentos
  6. 6. Eliminar clases con classList.remove()
  7. 7. Eventos de teclado
  8. 8. Identificar una tecla
  9. 9. Cerrar una ventana con ESC
  10. 10. Seleccionar los elementos de una galería
  11. 11. Añadir manejadores en un ciclo
  12. 12. Cambiar el src de una imagen
  13. 13. Depurar un manejador
  14. 14. Ámbito local
  15. 15. Ámbito global
  16. 16. Cambiar variables externas
  17. 17. Funciones dentro de funciones
  18. 18. Cierres
  19. 19. Un cierre en cada llamada
  20. 20. Usar cierres en los manejadores
  21. 21. Completar la galería
Siguiente tarea
  • Matriz de skills
  • Cursos
  • Registro
  • Iniciar sesión

Loading…
En unos segundos, estará listo.

  • Teoría
  • Teoría

Identificar una tecla

El evento ya funciona, pero ocurre al presionar cualquier tecla. Nosotros solo necesitamos ESC. ¿Cómo ejecutamos el código únicamente al presionar una tecla concreta? Usaremos el objeto del evento que ya conocemos.

Como vimos antes, los objetos de evento tienen propiedades útiles. Según el evento, pueden indicar su tipo, el carácter introducido, las coordenadas del cursor y otros datos. Los eventos de teclado incluyen el código de la tecla presionada en la propiedad keyCode.

Con esta propiedad podemos identificar algunas teclas por su código. Por ejemplo, el de Enter es 13 y el de ESC es 27. Estos dos códigos no cambian con la distribución del teclado, aunque los de otras teclas pueden variar. Puedes consultar más información aquí.

Ya sabemos dónde encontrar el número de la tecla y cuál es el que necesitamos. Solo falta reunirlo en un manejador.

document.addEventListener('keydown', function(evt) {
  // Comprobamos si el código de la tecla es 27
  if (evt.keyCode === 27) {
    // Este código solo se ejecutará al presionar ESC
  }
});

Configuremos el manejador para que las instrucciones se ejecuten solo al presionar ESC.

Por cierto,

keyCode es una propiedad obsoleta, pero la utilizaremos en estos ejercicios para seguir el código del proyecto. En código nuevo se prefieren key y code. key devuelve el valor de la tecla, como 'Enter', 'Alt' o 'Escape', y tiene en cuenta la distribución del teclado. code identifica la posición física de la tecla y no cambia con el idioma elegido.

  • index.html
  • style.css
  • script.js
HTML
<!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8"> <title>CandyShop</title> <link href="candy-shop/setting.css" rel="stylesheet"> <link href="style.css" rel="stylesheet"> </head> <body> <section class="card"> <div class="card__content"> <h1 class="visually-hidden">Heladería CandyShop</h1> <img class="card__logo" src="candy-shop/candyshop.svg" width="205" height="63" alt="CandyShop"> <p class="card__text">¡Preparamos helado con la crema más fresca!</p> <img class="card__img" src="candy-shop/icecream.png" width="196" height="240" alt="Helado"> </div> <div class="card__controls"> <a href="contacts.html" class="card__button button-open">Mostrar contacto</a> </div> </section> <section class="modal modal--show"> <div class="modal__content"> <h2 class="visually-hidden">Contacto</h2> <h3>Dirección:</h3> <p>Calle de la Crema, 19, Ciudad Dulce</p> <h3>Teléfono:</h3> <p>+1 (555) 010-1919</p> <h3>Correo:</h3> <p>contacto@example.com</p> <button class="modal__button button-close" type="button">Cerrar</button> </div> </section> <script src="script.js"></script> </body> </html>
CSS
h3 { margin: 0.5em 0; } p { margin: 0.5em 0 2em; } .card { width: 420px; margin: 50px auto 0; } .card__content { position: relative; background-color: #fad400; display: flex; flex-direction: column; align-items: flex-start; padding-top: 15px; padding-left: 20px; box-shadow: 0 5px 8px 0 #e8e8e8; } .card__img { align-self: flex-end; margin-top: auto; } .card__logo { position: absolute; } .card__text { font-size: 16px; line-height: 22px; font-weight: bold; position: absolute; left: 20px; top: 100px; width: 190px; } .card__controls { display: flex; justify-content: center; align-items: center; border: 2px solid #e8e8e8; border-top: 0; border-bottom-right-radius: 10px; border-bottom-left-radius: 10px; padding-top: 20px; padding-bottom: 20px; } .card__button { border: 0; padding: 12px 0; width: 230px; text-transform: uppercase; text-align: center; border-radius: 50px; color: #ffffff; font-weight: bold; font-size: 16px; text-decoration: none; background-color: #fad400; } .card__button:hover, .card__button:focus { background-color: #82da03; } .card__button:active { color: rgba(255, 255, 255, 0.3); background-color: #6cb502; } .modal { display: none; position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .modal--show { display: block; } .modal::after { content: ""; position: fixed; top: 0; left: 0; height: 100%; width: 100%; background-color: rgba(0, 0, 0, 0.3); z-index: 1; } .modal__content { position: relative; width: 300px; margin: 100px auto; padding: 30px 70px 15px; background-color: #ffffff; box-shadow: -1px 5px 12px 0 rgba(89, 90, 90, 0.3); z-index: 2; } .modal__button { position: absolute; top: 20px; right: 20px; width: 20px; height: 20px; font-size: 0; background: none; border: 0; } .modal__button::after, .modal__button::before { content: ""; position: absolute; right: 0; top: 20px; width: 26px; height: 6px; margin: -13px -3px; background-color: #7656de; } .modal__button::before { transform: rotate(45deg); } .modal__button::after { transform: rotate(-45deg); } .modal__button:hover::after, .modal__button:hover::before, .modal__button:focus::after, .modal__button:focus::before { background-color: #9b7ff7; } .modal__button:active::after, .modal__button:active::before { background-color: #4023a0; } .visually-hidden { position: absolute; width: 1px; height: 1px; margin: -1px; border: 0; padding: 0; white-space: nowrap; clip-path: inset(100%); clip: rect(0 0 0 0); overflow: hidden; }
JavaScript
var popup = document.querySelector('.modal'); var openPopupButton = document.querySelector('.button-open'); var closePopupButton = popup.querySelector('.button-close'); openPopupButton.addEventListener('click', function (evt) { evt.preventDefault(); popup.classList.add('modal--show'); }); closePopupButton.addEventListener('click', function () { popup.classList.remove('modal--show'); }); document.addEventListener('keydown', function () { console.log('Presioné una tecla'); });

El código ha cambiado, haz clic en "Actualizar" o activa la ejecución automática.

Ha ido a otra página

Haga clic dentro del mininavegador para poner el foco en esta ventana.

100%
Consola
ObjetivosRealizado
0
    1. Añade el parámetro evt a la función manejadora del evento de teclado.
    2. Dentro del manejador, comprueba que el código de la tecla presionada, evt.keyCode, sea igual a 27.
    3. Elimina del manejador el mensaje en la consola y añade dentro de la condición la instrucción que muestra la cadena 'Presioné ESC'.
    4. Pon el foco en el mininavegador, presiona ESC y comprueba el mensaje en la consola.
    Codigo Heroe

    © 2023-2026, codigoheroe.com