Saltar al contenido principal
Codigo Heroe
Lista de tareas
Introducción a los eventos1/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

Eventos del usuario

El jefe está contento con tus avances y te confía una tarea importante: programar una ventana emergente. También podemos llamarla popup.

¡Miau! Ya demostraste que puedes escribir código y resolver problemas. ¡Es hora de pasar de practicante a desarrollador junior!

Pero no te relajes, hay mucho trabajo. Hay que dar vida a las interfaces y añadir interacción con el usuario.

Programa una ventana emergente con los datos de contacto de la empresa. Necesitas el elemento con la clase modal.

Al hacer clic en el botón con la clase button-open, la ventana debe recibir la clase modal--show. Así aparecerá en la página.

Al hacer clic en el botón con la clase button-close, hay que quitarle la clase modal--show para que se cierre.

La ventana también debe cerrarse si el usuario presiona ESC mientras está abierta.

Ponte a trabajar.

Primero, veamos qué significa «dar vida» a una interfaz.

Ya tenemos el HTML y los estilos. La persona que maquetó la página preparó todos los estados de los elementos, pero la página todavía es estática: un conjunto de etiquetas y texto. En el HTML hay una ventana con la clase modal que no se ve en la página. Si le añadimos la clase modal--show, aparecerá en la interfaz. ¡Pero el usuario no va a cambiar las clases del HTML por su cuenta!

La interacción entre el usuario y la página sería más o menos así: hay un botón en la página y la ventana está oculta → el usuario hace clic en el botón → aparece la ventana.

El clic del usuario conecta los estados cerrado y abierto de la ventana. La interfaz cobra «vida» y reacciona a las acciones del usuario. Una acción sobre los elementos de la página, como hacer clic en un botón o presionar una tecla, puede generar un evento. En este capítulo veremos con más detalle los eventos y sus manejadores para resolver la tarea de Cupcake.

Primero buscaremos la ventana con querySelector y la guardaremos en una variable. Después comprobaremos cómo se ve abierta.

Ya vimos cómo funciona querySelector. Si necesitas repasarlo, consulta este ejercicio de «JavaScript en el navegador». Y para recordar cómo añadir una clase con classList.add(), revisa este ejercicio.

  • 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"> <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

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. Crea la variable popup y guarda en ella el elemento con la clase modal.
    2. Debajo, usa classList.add() para añadir la clase modal--show al elemento popup.
    Codigo Heroe

    © 2023-2026, codigoheroe.com