2012-02-10 11 views
0

商品のギャラリーでは、アイテム、セリア、または側面の色を選択することができます。各オプションには独自の画像があります。私は画像のSRC-置換を有するこれらのオプションのいずれかをクリックすると、効果のために、私はフェードイン/フェードアウトを使用している、それは次のようになります。画像の置換

$('button').click(function(){ 
$('img').fadeOut("slow",function(){ 
$(this).attr("src",newSRC); 
$(this).fadeIn("slow"); 
}); 
}); 

が、フェードインが絵を完成したときに描画する時間がありません。、既にキャッシュに読み込まれていて、サイトギャラリのために非常に見ている場合でもintercoms

私はpreCacheのすべての画像を使用できません。メインケースの低い接続部で一日中ロードします。私はアイテムを完全に削除してからロードを使用したいと思いますが、ギャラリーがクラッシュするアイテムを削除することはできません(柔軟なサイトでアイテムを削除できず、すべてが崩壊します)。今私はちょっとしたことをしましたが、... facepalm、申し訳ありません。

だから、最高の解決策は何だと思いますか?

+0

を私は負荷を使用することはできませんloadイベント – Shaheer

+0

を使用し、私はだそれを告げましたあなたが火かき棒の画像を削除する場合は、それを見ることができます構造をクラッシュします。 – Marius

答えて

0

私はそうすぐに(一時的な画像オブジェクトに)クリックで新しいイメージのロードを開始したいです実際にロードを開始するまで待つのではなく、早く(おそらくfadeOutが完了する前に)利用可能になります。それはあなたが実際の画像のSRCを割り当てるときにすぐにロードされ、少ない待ち時間が存在しますので、これは、ブラウザのキャッシュに画像を取得します:

$('button').click(function(){ 
    var imgLoaded = false, fadeDone = false; 
    var fadeTarget = $('img'); 

    // fadeIn the new image when everything is ready 
    function fadeIfReady() { 
     if (imgLoaded && fadeDone) { 
      fadeTarget.attr("src", newSrc).fadeIn("slow"); 
     } 
    } 

    // create temporary image for starting preload of new image immediately 
    var tempImg = new Image(); 
    tempImg.onload = function() { 
     imgLoaded = true; 
     fadeIfReady(); 
    }; 
    tempImg.src = newSrc; 

    // start the fadeOut and do the fadeIn when the fadeOut is done or 
    // when the image gets loaded (whichever occurs last) 
    fadeTarget.fadeOut("slow",function(){ 
     fadeDone = true; 
     fadeIfReady(); 
    }); 
}); 
+0

それは良い解決策ですが、私はそれを使用しましたが、画像に表示:noneプロパティがある場合でも構造が壊れています。 、柔軟性の悪い面... – Marius

+0

終わった!私はdiv-holderを作成しますが、要素が多すぎます...(いずれにしてもありがとう) – Marius

+0

@Tolan - "構造を壊す"とはどういう意味ですか?どのような問題が 'display:none'の原因ですか? – jfriend00

2

のように私は、それをフェードインする前にロードするための次の画像を待つでしょう:

var loadFail; 
$('button').click(function(){ 
    $('img').fadeOut("slow",function(){ 
     $(this) 
     .attr("src",newSRC) 
     .load(function(){ 
      $('img').fadeIn("slow"); 
      clearTimeout(loadFail); 
     }); 
     loadFail = setTimeout(function(){ 
      $('img').fadeIn("slow"); 
     }, 4000); 
    }); 
}); 
+0

非常に良いアイデア! – Marius

+0

私はあなたが言うように、 "回転"アイコンをクリックすると見ることができます、私は表示の主な問題だと思います:なし、fadeIn/Outは可視性の変更ではありません... – Marius

+0

この部分を削除し、 'loadFail = setTimeout – sally

関連する問題