En mi caso fue útil añadir una devolución de llamada a la función de proceso de carga:
function preloadImage(url, callback)
{
var img=new Image();
img.src=url;
img.onload = callback;
}
Y luego envolverlo para el caso de un conjunto de direcciones URL a las imágenes que se precargado con devolución de llamada en la que todo está hecho: https://jsfiddle.net/4r0Luoy7/
function preloadImages(urls, allImagesLoadedCallback){
var loadedCounter = 0;
var toBeLoadedNumber = urls.length;
urls.forEach(function(url){
preloadImage(url, function(){
loadedCounter++;
console.log('Number of loaded images: ' + loadedCounter);
if(loadedCounter == toBeLoadedNumber){
allImagesLoadedCallback();
}
});
});
function preloadImage(url, anImageLoadedCallback){
var img = new Image();
img.src = url;
img.onload = anImageLoadedCallback;
}
}
// Let's call it:
preloadImages([
'//upload.wikimedia.org/wikipedia/commons/d/da/Internet2.jpg',
'//www.csee.umbc.edu/wp-content/uploads/2011/08/www.jpg'
], function(){
console.log('All images were loaded');
});
Tenga en cuenta que algunos (todos los navegadores?) Dará a conocer la imagen después de algunos segundos si no lo ha usado. Para evitar esto, mantenga una referencia al objeto 'img', p. en una matriz en el alcance principal. – Tamlyn
¿Qué quiere decir con "liberar la imagen"? Si el navegador lo guardó en la memoria caché, permanecerá allí, ¿no? – Francisc
Permanecerá almacenado en caché en el disco, pero no en la RAM, y algunas veces el disco es demasiado lento (por ejemplo, animando una secuencia). – Tamlyn