Saltar al contenido principal
Codigo Heroe
Tarea anterior
Introducción a los eventos6/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

Eliminar clases con classList.remove()

Ya añadimos un manejador y la ventana se abre al hacer clic en «Mostrar contacto». Ahora haremos que se cierre al pulsar la cruz, el botón con la clase button-close.

Seguiremos los pasos que ya conocemos: buscar el botón, guardarlo en una variable y añadirle un manejador de clic. Al hacer clic quitaremos la clase modal--show de la ventana para cerrarla.

Sabemos añadir clases a los elementos. ¿Cómo las quitamos?

Usaremos el objeto classList, que ya conocemos. Para añadir clases utilizamos add(); para quitarlas, llamamos a remove() y le pasamos una cadena con el nombre de la clase. Así:

var popup = document.querySelector('.popup');
// El selector de clase lleva un punto al principio

popup.classList.remove('popup--open');
// El nombre de la clase se pasa sin punto

El resultado en el HTML es el mismo que si quitáramos la clase a mano.

<!-- Estado inicial del HTML -->
<section class="popup popup--open">
  …
</section>

<!-- Estado después de llamar a classList.remove -->
<section class="popup">
  …
</section>

Buscaremos el botón con querySelector, pero dentro del elemento popup, no en todo el documento. Sabemos que está ahí, así que podemos limitar la búsqueda a esa parte de la página.

Añadiremos el manejador de clic al botón con la clase button-close y comprobaremos que la ventana se cierra. No indicaremos el parámetro evt porque no utilizaremos el objeto del evento dentro del manejador. button-close es un botón de tipo button, así que aquí no tenemos una acción predeterminada que cancelar.

Por cierto,

usamos un punto al buscar un elemento mediante un selector de clase, pero no al añadir o quitar una clase. Recuerda que los nombres classList.remove y classList.add ya indican que trabajamos con clases: solo hay que pasar su nombre. En cambio, querySelector permite buscar de varias formas, como vimos antes. El punto delante del nombre indica que buscamos por clase y no por etiqueta u otro criterio.

  • 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'); openPopupButton.addEventListener('click', function (evt) { evt.preventDefault(); popup.classList.add('modal--show'); });

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. Después de openPopupButton, crea la variable closePopupButton y guarda en ella el elemento con la clase button-close. Búscalo dentro de popup.
    2. Debajo del manejador de openPopupButton, añade un manejador de clic a closePopupButton.
    3. Dentro del nuevo manejador, usa classList.remove() para quitarle a la ventana la clase modal--show.
    4. Cierra la ventana haciendo clic en el botón closePopupButton.
    Codigo Heroe

    © 2023-2026, codigoheroe.com