2012-04-03 9 views
1

他のページにリダイレクトする前に、index.htmlページで実行されているこのjQueryプリローディングスクリプトを約10Mb読み込みしました。jQueryプリローダーie-6/7問題

IE8/9 FF3 +とChromeでは正常に動作します。 しかし、IE6/7では動作しないようですが、起動して実行されたようですが、最後の部分は起動しません。例作業

:それはIE6/7でロードされた76分の75個のファイル上で立ち往生理由

-removed-誰もが知っていますか?

<script src="js/jquery-1.7.1.min.js"></script> 
<script> 
    (function($) { 
var imgList = []; 
$.extend({ 
    preload: function(imgArr, option) { 
     var setting = $.extend({ 
      init: function(loaded, total) {}, 
      loaded: function(img, loaded, total) {}, 
      loaded_all: function(loaded, total) {} 
     }, option); 
     var total = imgArr.length; 
     var loaded = 0; 

     setting.init(0, total); 
     for (i = 0; i < imgArr.length; i++) { 
      imgList.push($("<img />") 
       .load(function() { 
        loaded++; 
        setting.loaded(this, loaded, total); 
        if(loaded == total) { 
         setting.loaded_all(loaded, total); 
        } 
       }) 
       .attr("src", imgArr[i]) 
      ); 
     } 
    } 
}); 
})(jQuery); 

$(function() { 
$.preload([ 
"http://www.erikderuiter.nl/images/300x300-transparent.png", 
"http://www.erikderuiter.nl/images/300x300.png", 
"http://www.erikderuiter.nl/images/300x600.png", 
"http://www.erikderuiter.nl/images/600x300.png", 
"http://www.erikderuiter.nl/images/600x600.png", 
"http://www.erikderuiter.nl/images/900x300.png", 
], { 
    init: function(loaded, total) { 
     $("#indicator").html("Files: "+loaded+"/"+total); 
    }, 
    loaded: function(img, loaded, total) { 
     $("#indicator").html("Files: "+loaded+"/"+total); 
     $("#full-screen").append(img); 
    }, 
    loaded_all: function(loaded, total) { 
     $("#indicator").html("Loading: Done!"); 
     window.location.replace("http://www.erikderuiter.nl/somepage.html"); 
    } 
}); 
}); 
</script> 

<div id="indicator"></div> 

ページに画像をプリロードするヒントやベストプラクティスは、もちろん歓迎します。

+1

あなたの配列に余分なカンマがあります。IE8がそれに失敗してしまったので、それはちょうど疑問です。 –

+0

はい、アレイは長くなりました。この例のために短縮しました。 – Scriptor

答えて

1

また、イメージが既にキャッシュされているかどうかをテストする必要があります。

var img = new Image(); 
img.src = "foo.jpg"; 
if (img.complete || img.readyState === 4) { 
    // image is cached 
} 
else { 
    $(img).bind("load error onreadystatechange",function(e){ 
     // image is loaded 
    }); 
} 

画像の1の404エラーがある場合は、setTimeoutclearTimeoutとそれをキャッチする必要があります。

編集:私が使用するために砲撃される前にちょっとメモ:.bind:私はまだ下位互換性のためにプラグインで.bindを使用しています。再びhttps://github.com/tentonaxe/jQuery-preloadImages/blob/master/jquery.preloadimages.js

編集:

は、ここで上記の方法の一例です何度もこれを読んだ後、私はキャッシングはあなたが現時点で持っている問題であるかはわかりません。それは間違いなくあなたがそれをチェックしないと後で出てくるかもしれないものですが、あなたが持っている問題に関連していないかもしれません。

+0

ブラウザ全体をクリアしてもキャッシュがないので、ie6/7はまだ失敗します。 配列内のすべてのイメージが存在し、他のブラウザに読み込むことができます。あなたの例を悪く見てください。私はそれを使用できることを願っています。 – Scriptor

+0

ここにあなたのコードがjsfiddleでテストされ、photobucketから100グラフィックスがロードされています。 http://jsfiddle.net/NJZvz/ IE7で動作しているようですが、最後のもので終了するのにちょっと時間がかかります。 –

+0

ありがとう、しかし私はjsonまたはyahooapisに精通していません。 – Scriptor