0

スクリプトに問題があります。

配列内のすべての画像を読み込もうとしています。続行する前に、すべてが読み込まれていることを確認してください。しかし、それは機能していません。同様にエラーが発生しないため、何が問題なのかわかりません。

これは私が持っているものです:

window.requestAnimFrame = (function(){
  return  window.requestAnimationFrame       || 
          window.webkitRequestAnimationFrame || 
          window.mozRequestAnimationFrame    || 
          window.oRequestAnimationFrame      || 
          window.msRequestAnimationFrame     || 
          function( callback,  element){
            window.setTimeout(callback, 200 / 100);
          };
})();

function img_loader(){

for(var i in Images){
        Images[i]['img_src'].onload = function() {
            countImages ++;
        }
    }
}

function img_load_checker(){

    if(countImages == Images.length){
        return true;
    } else {
        requestAnimFrame( img_load_checker );   // keep checking
    }
}


window.countImages = 0;
img_loader();
    if(img_load_checker()){
            //this never gets executed - reason is unknown
    //continue with rest of the script
    }

これはconsole.log(Images);

[1: Object, 2: Object]
1: Object
img_src: <img>
2: Object
img_src: <img>

誰でも間違いを見ることができますか?

4

2 に答える 2

1

if ステートメントは決してそのようには機能しません。

その関数呼び出しは、魔法のようにそこに座って、非同期呼び出しが返されるまで待つつもりはありません。

if(img_load_checker()){
        //this never gets executed - reason is unknown
//continue with rest of the script
}

コールバックを使おう!

for(var i in Images){
        Images[i]['img_src'].onload = function() {
            countImages ++;
            if (countImages == Images.length) {
                callSomeMethod();  <-- Call back
            }
        }
    }
}

また

function img_load_checker(){

    if(countImages == Images.length){
        callNextStep();
    } else {
        requestAnimFrame( img_load_checker );   // keep checking
    }
}
img_load_checker();
于 2012-12-27T21:38:21.083 に答える
0

タイマーは必要ありません。

Images[i]['img_src'].onload = function() {
    if(countImages++ >= Images.length)
    {
         loadingHasFinishedNowDoWhateverYouWant();
    }

}
于 2012-12-27T21:37:47.833 に答える