Skip to content

Instantly share code, notes, and snippets.

@adamesque
Created February 16, 2011 23:38
Show Gist options
  • Save adamesque/830561 to your computer and use it in GitHub Desktop.
Save adamesque/830561 to your computer and use it in GitHub Desktop.
Uses jQuery's new Deferred object to help with image loading
/**
* Helper function for passing arrays of promises to $.when
*/
jQuery.whenArray = function ( array ) {
return jQuery.when.apply( this, array );
};
/**
* Accepts a single image src or an array of image srcs.
* @return Promise that resolves once images have loaded.
*/
function preloadImages (srcs) {
var dfd = $.Deferred(),
promises = [],
img,
l,
p;
if (!$.isArray(srcs)) {
srcs = [srcs];
}
l = srcs.length;
for (var i = 0; i < l; i++) {
p = $.Deferred();
img = $("<img />");
img.load(p.resolve);
img.error(p.resolve);
promises.push(p);
img.get(0).src = srcs[i];
}
$.whenArray(promises).done(dfd.resolve);
return dfd.promise();
}
@fcalderan
Copy link

Thank you, really interesting (and practical) example using deferred =)

@adamesque
Copy link
Author

adamesque commented Mar 24, 2011 via email

Copy link

ghost commented Mar 23, 2012

would be great, but the whenArray plugin seems to be no longer available

@cobbweb
Copy link

cobbweb commented Feb 26, 2013

If there's an error loading the image shouldn't it reject the deferred?

@aozora
Copy link

aozora commented Mar 11, 2013

please add a usage sample

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment