The other day I wrote up a quick plugin that will take an array of image URLs and preload them, while letting you specify what to do after each image is loaded and/or after all the images are finished loading.
jQuery.extend(jQuery, {
imagesToLoad: 0,
loadedImages: [],
preloadImages: function(){
var settings = {
urls : [],
begin : function(){},
each : function(){},
complete : function(){},
scope: window
};
jQuery.extend(settings, arguments[0]);
var images = [];
jQuery.imagesToLoad = settings.urls.length;
settings.begin.call(settings.scope, settings.urls);
for(var i = 0; i < settings.urls.length; i++){
images[i] = new Image();
images[i].onload = function(){
settings.each.call(settings.scope,this);
jQuery.loadedImages.push(this);
if(jQuery.loadedImages.length >= jQuery.imagesToLoad){
settings.complete.call(settings.scope,jQuery.loadedImages);
}
}
images[i].src= settings.urls[i];
}
}
});
You can then use this in your code by doing something like:
$.preloadImages({
urls: ['path/to/image/1.jpg', 'path/to/image/2.jpg'],
begin: function(urls){
console.log("loading images %o", urls);
},
each: function(image){
console.log("finished loading %s", image.src);
},
complete: function(images){
// do whatever after all the images are done loading
}
});
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…