查看该预加载脚本后,看起来该脚本不会等待一个图像加载,然后再转到下一个。我相信这是导致浏览器挂起的原因 - 你实质上是告诉浏览器同时加载100张图像。
更好的方法是使用递归函数在第一个图像完成后才开始加载下一个图像。这是我放在一起的一个简单例子。
编辑:这一个会导致堆栈溢出错误,请参阅下面的新版本。
var preLoadImages = function(imageList, callback) {
var count = 0;
var loadNext = function(){
var pic = new Image();
pic.onload = function(){
count++;
if(count >= imageList.length){
callback();
}
else{
loadNext();
}
}
pic.src = imageList[count];
}
loadNext();
};
$(document).ready(function(){
var files = ['file1,jpg', 'file2.jpg'];
preLoadImages(files, function(){ alert("Done!"); });
});
同样,这里最重要的事情是要确保你只迫使浏览器可以同时下载一个图像。除此之外,你有可能会锁定浏览器,直到完成。
-
编辑:新版本SANS递归。我测试了一个1000+项目数组,并没有遇到任何错误。我的想法是用间隔和布尔值替换递归;每隔50毫秒,我们就会调查函数并询问“任何加载?”如果答案是否定的,我们将继续排队下一张图片。这一直重复,直到完成。
var preLoadImages = function(imageList, callback) {
var count = 0;
var loading = false;
var loadNext = function(){
if(!loading){
loading = true;
count++;
pic = new Image();
pic.onload = function(){
loading = false;
if(count >= imageList.length-1){
clearInterval(loadInterval);
callback();
}
}
pic.src = imageList[count];
}
}
var loadInterval = window.setInterval(loadNext, 50);
};
我仍然好奇这将如何做,性能明智,在一个完整的网页上有很多其他的东西正在进行。让我们知道怎么回事。
重复:http://stackoverflow.com/questions/476679/preloading-images-with-jquery?rq=1 – 2013-06-24 08:33:50