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

Cambiar el src de una imagen

Ya añadimos los manejadores de clic y comprobamos que funcionan. ¿Cómo hacemos que la imagen grande cambie al hacer clic?

Las imágenes tienen un atributo src que podemos modificar desde JavaScript. Ya hablamos de esto antes.

Para cambiar la imagen del elemento con la clase full-photo, guardado en fullPhoto, debemos cambiar el valor de su src.

Tenemos el arreglo de datos photos. Cuando Cupcake nos encargó la tarea, dijo que «el orden de los elementos coincide con el de las miniaturas en el HTML». Todas las miniaturas están en thumbnails. Por tanto, a cada elemento de esa colección le corresponde el elemento de photos con el mismo índice.

Por ejemplo, si el usuario hace clic en la primera miniatura, thumbnails[0], la imagen grande debe mostrar la foto cuya ruta está en photos[0]. El código sería así:

thumbnails[0].addEventListener('click', function () {
  fullPhoto.src = photos[0];
});

Añadiremos el código dentro del manejador. Asignaremos a src el valor del elemento de photos. El índice de la miniatura coincidirá con el de la ruta de la imagen.

  • index.html
  • style.css
  • script.js
HTML
<!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8"> <title>Galería de Cupcake</title> <link href="gallery/setting.css" rel="stylesheet"> <link href="style.css" rel="stylesheet"> </head> <body class="pattern"> <section class="gallery"> <h1>Galería de Cupcake</h1> <p class="gallery__photo-full"> <img class="full-photo" src="gallery/laptop-large.jpg" width="550" height="367" alt="Fotografía ampliada de Cupcake"> </p> <p class="gallery__photo-previews"> <button class="gallery__photo-preview" type="button"> <img src="gallery/laptop.jpg" alt="Miniatura de Cupcake con una computadora portátil"> </button> <button class="gallery__photo-preview" type="button"> <img src="gallery/microphone.jpg" alt="Miniatura de Cupcake con un micrófono"> </button> <button class="gallery__photo-preview" type="button"> <img src="gallery/keyboard.jpg" alt="Miniatura de Cupcake con un teclado"> </button> <button class="gallery__photo-preview" type="button"> <img src="gallery/signboard.jpg" alt="Miniatura de Cupcake con un letrero"> </button> <button class="gallery__photo-preview" type="button"> <img src="gallery/tree.jpg" alt="Miniatura de Cupcake junto a un árbol"> </button> </p> </section> <script src="script.js"></script> </body> </html>
CSS
.gallery { display: flex; flex-direction: column; align-items: center; } .gallery__photo-full { margin-bottom: 12px; } .gallery__photo-full img { display: block; } .gallery__photo-previews { display: flex; list-style-type: none; margin: 0; width: 550px; padding: 0; justify-content: space-between; } .gallery__photo-preview { padding: 0; border: 0; border-radius: 0; background: none; } .gallery__photo-preview:hover, .gallery__photo-preview:focus { opacity: 0.7; } .gallery__photo-preview img { display: block; object-fit: cover; width: 100px; height: 100px; } .gallery__photo-preview--active img { outline: 5px solid red; outline-offset: -5px; } .pattern { background: url("gallery/leaves-pattern.png") 0 0 repeat; }
JavaScript
var photos = [ 'gallery/laptop-large.jpg', 'gallery/microphone-large.jpg', 'gallery/keyboard-large.jpg', 'gallery/signboard-large.jpg', 'gallery/tree-large.jpg' ]; var thumbnails = document.querySelectorAll('.gallery__photo-preview'); var fullPhoto = document.querySelector('.full-photo'); for (var i = 0; i < thumbnails.length; i++) { thumbnails[i].addEventListener('click', function () { console.log('Clic en la imagen'); }); }

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. En el manejador, sustituye el mensaje en la consola por la asignación de la ruta de la imagen a src: fullPhoto.src = photos[i].
    2. Haz clic en cualquier miniatura de la galería.

    Observa que el programa tiene un error. En los próximos ejercicios veremos por qué ocurre.

    Codigo Heroe

    © 2023-2026, codigoheroe.com