No aplique lazy loading usando IntersectionObserver sino que lo hice añadiendo al elemento <img> el atributo loading = “lazy” de es...

fabio andres zamora osorio

fabio andres zamora osorio

Pregunta
student
hace 3 años

No aplique lazy loading usando IntersectionObserver sino que lo hice añadiendo al elemento <img> el atributo loading = “lazy” de esta forma:

movieImg.setAttribute("loading", "lazy")

Al hacer eso el lazy loading funciona bien al hacer scroll horizontal pero con las imagenes que se muestran al hacer scroll vertical falla aunque haya puesto una altura a las imagenes con el atributo min-height como lo explica el profesor. ¿saben porque no funciona el lazy loading al hacer scroll vertical, sera por haber aplicado lazy loading de un forma diferente ?

6 respuestas
    Juan Castro

    Juan Castro

    teacher
    hace 3 años

    ¿Podrías mostrarme por fa tu código para ayudarte a revisar? A simple vista parece que todo lo estás haciendo bien jeje. :sweat_smile:

    fabio andres zamora osorio

    fabio andres zamora osorio

    student
    hace 3 años

    codigo de la funcion createMovies:

    function createMovies(movies, container, clean){ if (clean) { container.innerHTML = ""; } movies.forEach(readMovies => { const movieContainer = document.createElement("div") movieContainer.classList.add("movie-container") const movieImg = document.createElement("img") //se le añade al elemento movieImg la clase "movie-img" para asi aplicarle el estilo que dicha clase tiene en el codigo css movieImg.classList.add("movie-img") movieImg.setAttribute("alt", readMovies.title) movieImg.setAttribute("src", "https://image.tmdb.org/t/p/w300/" + readMovies.poster_path) movieImg.setAttribute("loading", "lazy") movieImg.addEventListener("error", () =>{ movieImg.setAttribute("src", "https://cdn4.iconfinder.com/data/icons/ui-beast-4/32/Ui-12-512.png") } ) movieContainer.appendChild(movieImg) container.appendChild(movieContainer) movieContainer.addEventListener("click", ()=>{ location.hash = "#movie=" + readMovies.id }) }) }

    codigo de la funcion asincrona getTrendingMovies:

    async function getTrendingMovies(){ const res = await fetch("https://api.themoviedb.org/3/trending/movie/day?api_key=7258b971a0e753650d55f93fb1949de7")//el numero /3/ es la version de la api const data = await res.json() const movies = data.results maxPage = data.total_pages createMovies(movies, genericSection, true) }

    parte del codigo css donde se añade altura a las imagenes de peliculas:

    .movie-img { border-radius: 8px; min-height: 180px; /*poner un alto minimo a cada elemento img permite que la tecnica lazy loading fucione correctamente al hacer scroll vertical*/ }
    Brandon Argel Verdeja Domínguez

    Brandon Argel Verdeja Domínguez

    student
    hace 3 años

    Podrías intentar agregando la propiedad

    loading
    antes que la del
    src
    , o incluso agregarla antes que todas las demás propiedades de la imagen, tal vez las comienza a cargar justo antes de que se le agregue el
    loading
    . 🤔 Todo lo demás se ve bien.

    fabio andres zamora osorio

    fabio andres zamora osorio

    student
    hace 3 años

    BrandArgel gracias por la respuesta. Hice lo que dijiste pero no funciono. He buscado en internet y el error mas comun que las personas tienen con el atributo loading = lazy es que no ponen altura o anchura a la imagen que es lo que explico el profesor en esta clase. Asi que todavia sigo con la duda.

    Matias Ezequiel Rivero

    Matias Ezequiel Rivero

    student
    hace 3 años

    Hola, has probado con otro navegador? si estas usando Mozilla, fijate en probarlo en Chrome!! En mi caso en chrome me funcionar y en mozilla carga todo (en vista vertical de tendencias, pero en horizontal si funciona). Si logro saber la causa, luego les aviso. Muchas gracias.

    fabio andres zamora osorio

    fabio andres zamora osorio

    student
    hace 3 años

    Hola matiasrivero40 yo uso el navegador edge y ahi fue donde probe el lazy loading usando el atributo html loading = “lazy”. Segun vi en la pagina web [https://caniuse.com/?search=lazy] ese atributo html para aplicar lazy loading es soportado por los navegadores chrome y edge desde el año 2020 pero firefox no tiene un soporte completo de esa funcionalidad por esa razon debe ser que te falla en firefox.

Curso de API REST con Javascript: Performance y Usabilidad

Curso de API REST con Javascript: Performance y Usabilidad

Mejora la usabilidad de aplicaciones web implementando botones de "like" desde el frontend. Aumenta la performance gestionando películas favoritas sin autenticación gracias a Local Storage. Aprende a mantener la integridad y protección de tus API keys durante el proceso de despliegue.

Curso de API REST con Javascript: Performance y Usabilidad
Curso de API REST con Javascript: Performance y Usabilidad

Curso de API REST con Javascript: Performance y Usabilidad

Mejora la usabilidad de aplicaciones web implementando botones de "like" desde el frontend. Aumenta la performance gestionando películas favoritas sin autenticación gracias a Local Storage. Aprende a mantener la integridad y protección de tus API keys durante el proceso de despliegue.