2011-04-26 11 views
1

私は動作中のスクリプト(thanks stackexchange!)をオンザフライで交換しています。私はギャラリースクリプトとして使用します。これは次のようになります。イメージがロードされるまで画像の置換を待つ

  $(".source a").click(function(e){ 
       e.preventDefault(); 
       var $a = $(this); 
       $("#targetcontainer img").hide("puff", function(){ 
        $(this).attr("src", $a.attr("href")).show("fold"); 
       }); 
      }); 

このスクリプトに関する問題は、JQ showコマンドの後に古いイメージがちらつくことです。新しいソースイメージは2番目かそれ以上の後に表示され、奇妙な効果をもたらします。これを防ぐ方法を教えてください。

答えて

8

...

$(".source a").click(function(e) { 
    e.preventDefault(); 

    var newSrc = this.href, 
     image = new Image();  

    image.onload = function() { 
     $("#targetcontainer img").hide("puff", function() { 
      $(this).attr("src", newSrc).show("fold"); 
     }); 
    } 
    image.src = newSrc; 
}); 
+0

ありがとう、これは私の問題を解決しました。 – cukabeka

+1

私は何らかの理由で私のところで動作しません – NaturalBornCamper

+0

ループ内にある場合は、最終的なimg srcを非同期であるimage.srcに設定してください。それ以外の場合は、その時点で変数が何であってもそれらはすべてに設定されます。 – FlavorScape

0

最小限の遅延ですべてのブラウザでこの作業を行う最良の方法は、CSS spritesを使用することです。

これはオプションではない場合は、イメージをどこかに事前ロードして非表示にすることができます。ブラウザはイメージを早期に読み込み、JQueryの実行時には遅延しません。 jQueryのはあなたがそれを表示しようとする前に画像をプリロードすることができ

+0

スプライトは、このギャラリーで、このために働くいけません。しかし、ありがとう! – cukabeka

7

負荷イベントが存在します。

1)画像を取得します。

var image = $("#img"); 
image.hide(); 

2)ロード時に何かします。

image.load(function(){ 
image.show(); 
}); 

3)imageが変更された後に、load属性をfireイベントに変更します。

image.attr("src","image.jpg"); 

あなたはここでそれについての詳細を読むことができます:http://api.jquery.com/load-event/

+0

私はjQuery 3のロードは何か異なっていると思いますか?これはちょうど今イメージをダウンロードする:D – ppumkin

関連する問題