预加载图像不起作用

时间:2012-12-27 21:27:11

标签: javascript

我的脚本出现问题。

我正在尝试加载数组中的所有图像,然后在继续之前检查它们是否已全部加载。但它不起作用我同样没有任何错误,所以我不确定是什么问题。

这就是我所拥有的:

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>

任何人都可以看到错误吗?

2 个答案:

答案 0 :(得分:1)

如果声明永远不会像那样工作。

那个函数调用不会魔术般地坐在那里等待异步调用返回。

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();

答案 1 :(得分:0)

您不需要计时器:

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

}