2011-07-03 10 views
2

キャッシュをクリアするときにページが最初に読み込まれたときに最初のロード時にイメージが表示されないというキャッシングの問題があります。私は画像を提供する外部メディア会社と協力しています。私は一度読み込まれた画像のソースを置き換えるコールバック関数の中に以下のコードを書きました。最初のロード時にイメージを置き換えるときのキャッシュの問題

これは正しいですか?

$('img').each(function(){ 

    var img = $(this); 

    // AJAX HEAD request to check the larger image file has loaded 
    var img_src_large = img.attr("src").replace("/viewfinder.jpg", "_SMALL.jpg"); 

    $.ajax({ 
     url: img_src_large, 
     type:'HEAD', 
     error: 
      function(){ 
       img.fadeIn("fast"); 
      }, 
     success: 
      function(){ 
       img.attr("src",img_src_large).fadeIn("fast"); 
      } 
    }); 

}); 
+0

私はこのブログの投稿に出くわしましたが、私はそれを動作させることができませんでした。 http://www.bennadel.com/blog/1007-jQuery-Attr-Function-Doesn-t-Work-With-IMAGE-complete.htm#comments_16704 –

+0

私はちょうどここで二重取りました、あなたはトリックしようとしていますブラウザは、Ajaxリクエストを介してイメージを読み取ることによってそれをキャッシュに入れますか? –

+0

AJAXを使用することは、私がそれを動作させようとした単なる例でした。私がしようとしているのは、replace()で画像のソースを変更することだけです。最初のロード時ではないのに、イメージがブラウザのキャッシュにある場合、これは正常に動作します –

答えて

1

これは、キャッシングのために既に読み込まれている画像に「load」イベントを強制的にトリガすることで実現できます。あなたは、あなたが望むロジックでfadeInの部分を置き換えることができます。

$('img').hide().one("load",function(){ 
    $(this).fadeIn(500); 
}).each(function(){ 
    if(this.complete) $(this).trigger("load"); 
}); 
0

私はこの問題をimg loadで解決しましたが、これは同じ状況で誰かを助けるかもしれません。

// Wrap Thumb Views 
$('#rfxViews img').each(function(){ 

    var img = $(this); // cache selected to variable 

    // Replace the small swatch images 
    var img_src_large = img.attr("src").replace("/viewfinder.jpg", "_SMALL.jpg"); 

    // Set empty source until image has loaded below 
    img.attr("src",""); 

    img.attr('src', img_src_large).hide().load(function(){ 
     $(this).show() 
    }) 

}); 
関連する問題