Redirect After Loading Images
So I have been recently developing a site, The problem is the backgrounds for each page are images, and as a result, on slower connections (which is the case of some of the target
Solution 1:
You need to wait for the load
event. It's quite simple:
functionpreload(images, timeout, cb) {
var cbFired = false,
remaining = images.length,
timer = null;
functionimageDone() {
remaining--;
if(remaining === 0 && !cbFired) {
cbFired = true;
clearTimeout(timer);
cb();
}
}
functiontimerExpired() {
if(cbFired)
return;
cbFired = true;
cb();
}
for(var i = 0; i < images.length; i++) {
var img = newImage();
img.onload = imageDone;
img.onerror = imageDone;
img.src = images[i];
}
timer = setTimeout(timerExpired, timeout);
}
You need to check a few things so that users don't get stuck:
- You need to wait for both
load
anderror
so that the page doesn't get stuck if an image fails to load. - You should set a maximum timeout.
- Also, in your code,
i
was a global variable (novar
declaration).
Here's how to use it:
var images = [ "backgrounds/bg1.jpg",
"backgrounds/bg2.jpg",
"backgrounds/bg3.jpg",
"backgrounds/bg4.jpg"];
preload(images, 10000/* 10s */, function () {
window.location = 'next_page';
});
Solution 2:
Modify your preloader so that it binds to the "onload" event of the Image object and when all callbacks are fired it redirects (untested sample code below):
var images = newArray()
var count = 0;
functionpreload() {
var numImages = preload.arguments.lengthfor (i = 0; i < numImages; i++) {
images[i] = newImage();
images[i].onload = doneLoading; // See function below.
images[i].src = preload.arguments[i];
}
functiondoneLoading() {
if (++count >= numImages) {
window.location = "index.html";
}
}
}
preload(
"backgrounds/bg1.jpg",
"backgrounds/bg2.jpg",
"backgrounds/bg3.jpg",
"backgrounds/bg4.jpg"
)
Post a Comment for "Redirect After Loading Images"