查看該預加載腳本後,看起來該腳本不會等待一個圖像加載,然後再轉到下一個。我相信這是導致瀏覽器掛起的原因 - 你實質上是告訴瀏覽器同時加載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