2

私はすべて、メニューのあるWebサイト(http://euroscala.balkanium.com/)を作成しています。メニュー項目をクリックすると、サムネイルリストが表示されます。表示されるはずのすべての画像をプリロードしてから表示しようとしています。IEを除くすべてのブラウザで正常に動作します(バージョン8があります)。私はここを見て喜んでいる人のためにコードをまとめました:http://jsfiddle.net/THpgM/2/

問題はこのコードにあると思います(フィドルの最初の関数の下部にあります)

img.onload = (function(i){ 
  // code here is executed

  return function(){
    // code here is not

    ++totalLoaded;
    document.getElementById("li" + i).style.height = this.height + "px";
    document.getElementById("li" + i).setAttribute("data-height", this.height);

    if(totalLoaded == totalThumbs){
      // do some stuff
    }
  };
})(i);

私はこれを理解しようとして2日ほど過ごしました。誰かがこれで私を助けてくれるなら、それは大いにありがたいです。

4

1 に答える 1

3

IE では、割り当てる前に.onloadハンドラーを割り当てる必要があります.src。そうしないと、onload ハンドラーが配置される前に onload イベントが発生する可能性があり、イベントを見逃すことになります。

// assign .onload before .src
img.onload = function() {};
img.src = "xxx.jpg";

IE での特定の問題は、画像がブラウザーのキャッシュにあり (したがって、.src割り当てられるとすぐに読み込まれる)、onload ハンドラーが実行されない場合に発生します。

したがって、jsFiddle で、への割り当てを.srcへの割り当ての後に移動します.onload

于 2012-05-11T21:54:42.700 に答える