Come posso verificare se le immagini di sfondo sono state caricate con JavaScript?

Come posso verificare se le immagini di sfondo sono state caricate con JavaScript?

La procedura per stabilire se anche le immagini di sfondo sono state caricate richiede in JavaScript solo un passaggio in più.

Possiamo definire la seguente funzione di utility:


var preloadBackgrounds = function( elements ) {
	var elems = document.querySelectorAll( elements );
	var imgs = []; // Array di immagini
	var loaded = false; // Status
	
	for( var i = 0; i < elems.length; ++i ) {
		var elem = elems[i];
		var bgImage = window.getComputedStyle( elem, null ).getPropertyValue( "background-image" );
		var bgImageUrl = bgImage.replace( "url( ", "" ).replace( ")", "" ).replace( '"', "" ).replace( "'", "" );
		if ( /(\.jpg|\.jpeg|\.png)$/.test( bgImageUrl ) ) {
			// Creo un elemento img dall'URL
			var imgBg = document.createElement( "img" );
			imgBg.src = bgImageUrl;
			// Popolo l'array
			imgs.push( imgBg );
		}
	}
	// Ci sono immagini di sfondo?
	if( imgs.length > 0 ) {
		var n = 0;
		for( var j = 0; j < imgs.length; ++j ) {
			var currentImg = imgs[j];
			currentImg.addEventListener( "load", function() {
				// L'immagine è stata caricata?
				if( this.complete ) {
					n++;
				}	
			}, false);
		}
		if( n == imgs.length ) {
			loaded = true; // Cambio lo status
		}	
	} else {
		loaded = true; // Non ci sono immagini, quindi restituisco true
	}	
	
	return loaded;
};

Torna su