Created
September 19, 2010 18:18
-
-
Save robotlolita/586988 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* preload(urls[, wait=10][, callback]) | |
* - urls (Array): a list of all image urls to preload | |
* - delay (Number): how much time to wait for an image before | |
* flagging it as unreachable, in seconds. | |
* - callback (Function): optional function to call after all images | |
* are preloaded. | |
**/ | |
function preload(urls, wait, callback) { | |
var timer_id; // id of the last timer event | |
if (typeof wait == "function") { | |
callback = wait; | |
wait = 10 } | |
// signals the previous item was loaded and continues to load the | |
// next items | |
function next() { | |
var current, img; | |
clearTimeout(timer_id); | |
current = urls.shift(); | |
if (current) { // there are sill items to load | |
img = new Image(); | |
img.onload = next; | |
img.src = current; | |
// if it's not loaded in 10 seconds, forget about it. It | |
// maybe just because the image is just too large, or any | |
// other thing, and the image may be loaded later on. But | |
// since the Image object doesn't offers an `onerror` | |
// event, we have to make sure an unreachable image won't | |
// block the entire queue. | |
timer_id = setTimeout(next, wait * 1000) } | |
else { // all items loaded | |
callback && callback(); | |
} | |
} | |
next(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment