Ejercicio JS – Como cargar una imagen aleatoria al clicar un botón

3.3
(3)

Publicado

Aviso importante web en obras

Es posible que el contenido que estás visualizando tenga un formato un poco raro o que se haya perdido algún contenido. Esto se debe a que en 2023/09 decidí renovar la página y con más de 1000 escritos el trabajo de irlos revisando uno por uno es agotador. Poco a poco iré corrigiendo todos los contenidos. ¡Gracias por la comprensión!

portada ejercicio javascript modificar atributos DOM

En este ejercicio vamos a modificar los atributos de un nodo del documento web mediante javascript

Vamos a usar los siguientes conceptos.

  • Llamar un nodo mediante document.getElementsByTagName().
  • Vamos a usar el conocido servicio de internet lorempixel.com
  • Vamos a modificar un atributo por acceso directo al «src» o mediante setAttribute()

Te recomiendo esta lectura.

Vamos a repasarlo mediante un ejercicio.

Enunciado

Dado el siguiente código html completa el script para que cada vez que se haga clic en el botón se cargue una nueva imagen de 400px de ancho por 400px de alto.

NOTA: http://lorempixel.com es un conocido servicio de internet que devuelve imágenes aleatorias cada vez.

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="description" content="">
        <meta name="author" content="Francesc Ricart">
        <title>Ejercicio js - imágenes aleatorias</title>
        
    </head>
    <body>
        
    <img>
    <button onclick="imagenAleatoria()">Generar imagen</button>
    
    <script>
        
    function imagenAleatoria(){
    //resolución del ejercicio a rellenar 
    }
        
    </script>

    </body>
</html>

Solución del ejercicio

Este ejercicio es en realidad muy sencillo.

Simplemente debemos

  1. Identificar y acceder al nodo. Una buena práctica es  guardarlo en una variable.
  2. Acceder al atributo src. Podemos hacerlo de dos formas (observarlas comentadas en el código de la función imagenAleatoria().
  3. Modificar la url existente por una de nuestro interés.
  4. Esperar a que cargue la imagen, suele tardar un poco.
  5. Si tarda demasiado activar la consola del navegador para detectar posibles errores.

[vc_custom_heading text=»¿Como queda el documento html?» font_container=»tag:h3|text_align:left» use_theme_fonts=»yes»]

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="description" content="">
        <meta name="author" content="Francesc Ricart">
        <title>Ejercicio js - imágenes aleatorias</title>
        
    </head>
    <body>
        
    <img>
    <button onclick="imagenAleatoria()">Generar imagen</button>
    
    <script>
        
    function imagenAleatoria(){
        var url = "http://lorempixel.com/400/400/"
        document.getElementsByTagName("img")[0].src=url;
        //document.getElementsByTagName("img")[0].setAttribute("src",url)
    }
        
    </script>

    </body>
</html>

¡Hola!

Querido lector,

Este ejercicio javascript nos ha servido para practicar la inserción y/o modificación de atributos de una etiqueta HTML de un modo muy simple.

¡Si te ha gustado este contenido te animo a seguirme en mi perfil de empresa de Linkedin!

  1. Avatar de Marina Borenstein

    Buenas tardes! Muy bueno tu post. Y si quisiera hacerlo con una galería propia de imágenes, como podría hacerlo? Saludos!

    1. Avatar de Francesc Ricart

      Hola Marina,
      Buena pregunta.
      Esta url siempre devuelve una imagen distinta. Pero entiendo que no es lo que tú necesitas.
      Para hacerlo en primer lugar escribiría las url de las imágenes en una lista (array).
      1) Por ejemplo la variable
      imagenes = [url_imagen1, url_imagen2, url_imagen3];
      2) a continuación únicamente necesitas generar un número aleatorio. Puedes encontrar en este ejercicio cómo generar un número aleatorio.
      3) finalmente únicamente tienes que llamar a
      imagenes[i] dónde i es el número aleatorio generado.

      PD: otra opción sería llamarlo desde una BBDD junto con php + mysql

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *