我在仅在一个方面适应 jQuery 图像预加载脚本时遇到了麻烦:我不知道如何确保我的图像按图像数组的顺序加载/显示。
目前,每次我重新加载页面时,图像都会以不同的顺序显示。(除了图像顺序之外的所有东西都可以正常工作。)
谁能帮我解决这个问题?
相关代码:
(function($) {
var imgList = [];
$.extend({
preload: function(imgArr, option) {
var setting = $.extend({
init: function(loaded, total) {},
loaded: function(img, loaded, total, bild) {},
loaded_all: function(loaded, total) {}
}, option);
var total = imgArr.length;
var loaded = 0;
setting.init(0, total);
for (var i = 0; i < total; i++) {
imgList[i] = ($("<img />")
.attr("src", imgArr[i])
.load(function() {
loaded++;
setting.loaded(this, loaded, total, this.src);
if(loaded == total) {
setting.loaded_all(loaded, total);
}
})
);
}
}
});
})(jQuery);
$(document).ready(function() {
$(function() {
$.preload([
"image1.jpg",
"image2.jpg",
"image3.jpg"
], {
init: function(loaded, total) {
var z = 0;
while (z < total) {
z++;
$("section nav").append('<img id="e'+z+'" src="all/blank.png" alt=""/>');
}
},
loaded: function(img, loaded, total, bild) {
$("#e"+loaded).prop("src",bild);
},
loaded_all: function(loaded, total) {
//all done!
}
});
});
});
更新:
最后,我用一个完全不同的、更短的脚本解决了这个问题,我从头开始编写。它开始向我的图像容器添加尽可能多(非常小的)虚拟图像作为占位符,因为数组包含真实图像,并且仅在前一个图像完成后加载每个图像:
imgs = new Array("number1.png","number2.png","number3.png");
for (i=0; i<imgs.length; i++) {
$("section nav").append('<img id="e'+i+'" src="blank.png" alt=""/>');
}
fin(0);
function fin (n) {
$('#e'+n).attr('onload', 'fin('+n+')');
$("#e"+n).attr("src", imgs[n]).load( function() {
fin ((n+1));
});
}