私は正常に動作する非常に単純なjQueryプリローダーを持っています(コードは正しいと思いますが、先に進んでチェックしてください)...
私がやろうとしているのは、画像のダウンロードに失敗した場合、別のバリエーションを試すことですパス内の数字で表されるバリエーションは最大 4 つまでです。
説明させてください:
画像パスは次のようになります
.../images/800px/image1.jpg
それが失敗した場合は、
.../images/350px/image1.jpgを試してください
それが失敗した場合は、
.../images/100px/image1.jpgを試してください
それが失敗した場合は、
.../images/50px/image1.jpgを試してください
それが失敗した場合は、
.../images/30px/image1.jpg を試してください
お気づきのように、これらすべてのバリエーションの違いは、パス内の数字です...つまり、800、350、100、50、30 です。
今、関数 load_img (以下) で、.error 属性を使用して、画像が見つかるまで関数を再帰的に呼び出すことを考えていました..
これは最善のアプローチですか?これを達成するためのヒントやベストプラクティスはありますか?
前もってありがとう
マルコ
これがコードのサンプルです
<div id="zoom-artwork"></div>
<ul class="nav-zoom-artwork">
<li><a href=".../images/800px/image1.jpg">image doesn't exist...</a></li>
<li><a href=".../images/800px/image2.jpg">image 2</a></li>
<li><a href=".../images/800px/image3.jpg">image 3</a></li>
</ul>
...
$('#nav-zoom-artwork a').click(function(e) {
var src = $(this).attr('href');
var alt = $(this).children('img').attr('alt');
load_img(src, alt);
e.preventDefault();
});
// ZOOM artwork
function load_img(src, alt) {
var img = new Image();
$(img).load(function() {
// set the image hidden by default
$(this).hide();
// remove the loading class, then insert the image
$('#zoom-artwork').removeClass('loading').html(this);
// fade in the image to create a nice effect
$(this).fadeIn(400);
})
.error(function() {
alert('try another size... call the function recursively with another path...');
})
.attr({
src:src,
alt:alt
});
}