JavaScript での画像の読み込みに少し問題があります。一連の画像を順番にロードする必要があります。つまり、画像 1 のロードが完全に終了したときにのみ、画像 2 のロードが開始されます。
私が見つけた問題はonLoad
、画像の読み込みが完了したときではなく、画像の読み込みが開始されたときに JavaScript メソッドが起動することです。したがって、キューのどこにあるかに関係なく、最小の画像が常に最初に読み込まれます。JS フィドルで私が意味することの簡単な例をまとめました(HTML と JS コードも以下にあります)。
次の画像の読み込みを開始する前に、画像が完全に読み込まれるまで待つ方法はありますか?確かにそれほど難しいことではありませんか?
注:私はもともとjQuery.load
関数を使って書いたのですが、同じ結果を得たので、生のJSをいじっていました。
HTML コード:
<ul>
<li><img src="" alt="image 1" width="210" height="174"></li>
<li><img src="" alt="image 2" width="210" height="174"></li>
<li><img src="" alt="image 3" width="210" height="174"></li>
<li><img src="" alt="image 4" width="210" height="174"></li>
<li><img src="" alt="image 5" width="210" height="174"></li>
</ul>
<a href="#" id="loader">Load the images</a>
JS コード:
var imgArr = [
"http://media.topshop.com/wcsstore/ConsumerDirectStorefrontAssetStore/images/colors/color7/cms/pages/static/static-0000038166/images/zine-HP-UK.jpg",
"http://media.topshop.com/wcsstore/ConsumerDirectStorefrontAssetStore/images/colors/color7/cms/pages/static/static-0000038166/images/Valentine_UK.jpg",
"http://media.topshop.com/wcsstore/ConsumerDirectStorefrontAssetStore/images/colors/color7/cms/pages/static/static-0000038166/images/crop_UK__.jpg",
"http://media.topshop.com/wcsstore/ConsumerDirectStorefrontAssetStore/images/colors/color7/cms/pages/static/static-0000038166/images/hitlist_UK--.jpg",
"http://media.topshop.com/wcsstore/ConsumerDirectStorefrontAssetStore/images/colors/color7/cms/pages/static/static-0000038166/images/chinese_new_year_UK_new_0402.jpg"
],
totalImgs = imgArr.length,
count = 0;
function onLoaded(count) {
console.log("fired onload "+count);
var currentImg = $('li:eq('+count+') img');
currentImg.attr('src', imgArr[count]).css('display','block');
count++;
if (count < totalImgs) {
loadImg(count);
};
}
function loadImg(count) {
imgObj = new Image()
imgObj.src = imgArr[count];
imgObj.onLoad = onLoaded(count);
}
$('#loader').click(function() {
loadImg(count);
});