jQuery 画像プリロード スクリプトを 1 つの側面だけで適応させるのに問題があります。画像が画像配列の順序で読み込まれ/表示されることを確認する方法がわかりません。
現時点では、ページをリロードするたびに画像が異なる順序で表示されます。(画像の順序以外はすべて正常に動作します。)
誰でもこれを修正するのを手伝ってもらえますか?
関連するコード:
(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));
});
}