Detectar cuando todas las imágenes están cargadas con javascript

por

Detectar Imagen CargadaHoy os traigo un código que os permitirá detectar si todas las imágenes están cargadas, y en caso afirmativo, hacer algo con ellas.

Para facilitar el trabajo nos valdremos de jQuery que nos hará el trabajo más cómodo.

Lo primero es ocultar todas las imágenes, con un opacity:0 por ejemplo.


	img{

		opacity:0;

	}
	

Luego, generaremos un script con jQuery que detectará las imágenes que hay en la página, detectará cuando estén cargadas y hará algo cuando estén todas.

A continuación os dejo el script que hace todo el trabajo:

	$(document).ready(function(){

		var totalImages = $('img').length;
		var cont = 0;

		$('img').each(function(){


			if(this.complete) {

				cont++;

					if(totalImages == cont){

						showImages();

					}

			}
			else{
				$(this).load(function(){
					cont++;

					if(totalImages == cont){

						showImages();

					}

				});
			}

		});

	});

	function showImages(){

		$('img').css('opacity','1');

	}
	

Contabilizamos el número de imágenes totales de la página y, a continuación, recorremos el listado de imágenes. Por cada imagen que se carga o que ya está cargada en cache sumamos 1 al contador hasta que todas están cargadas, momento en el cual mostramos todas las imágenes con opacity 1.

Este script tiene en cuenta tanto las imágenes que cargamos desde el servidor gracias a .load() como aquellas que el propio navegador ya tiene cacheadas gracias al evento .complete

Espero que os sirva de ayuda.

COMENTARIOS

12-04-2017 01:07:44
Si la imagen no se puede cargar porque su enlace está roto también es contabilizada y el resto se cargan igualmente.
11-04-2017 16:17:33
y si una imagen no ha podido cargarse, ¿qué pasa con el resto?
21-03-2017 16:16:56
Hola @Divisor, respecto a lo que comentas del $(this) en showImages, no hace falta pasarselo ya que si te fijas, inicialmente en el each vamos contabilizando el número de imágenes que van estando listas y cuando están todas se llama a showImages() para que les modifique el opacity a todas a la vez. Respecto al jsfiddle, intentaré publicar alguna demo pero sobre ejemplo o artículo de códigos más completos, en este caso solo trato de mostraros como se debe detectar cuando una imagen está cargada, ya sea desde el servidor o desde la cache del navegador. Un saludo,
17-03-2017 23:44:40
Es muy interesante. Agradecería poder ver un ejemplo en jsfiddle En la línea 15 showImages(); no habría que pasarle el atributo $(this ) ???? para que pueda aplicar el css a esa imagen en concreto ???. Si llamas al showImages y aplica el css, lo aplica de forma global no ?

DEJA TU COMENTARIO