2010-05-24 58 views
0

我创建了一个JavaScript应用程序,要求首先预加载所有图像。在Firefox中一切正常,但在Internet Explorer中,我的循环跳过了19的计数并跳到21.有没有人在之前遇到过这个问题,是什么原因造成的?预加载图像时的Internet Explorer循环错误

您可以复制并粘贴以下脚本以进行测试。

var preLoad = function() { 
    var docImages = ["http://www.sanatural.co.za/media/images/map/rsa_prov.gif", "http://www.sanatural.co.za/media/images/map/loading.gif", "http://www.sanatural.co.za/media/images/map/loading2.gif", "http://www.sanatural.co.za/media/images/map/ec_land.gif", "http://www.sanatural.co.za/media/images/map/ec_roll.gif", "http://www.sanatural.co.za/media/images/map/ec_state.gif", "http://www.sanatural.co.za/media/images/map/fs_land.gif", "http://www.sanatural.co.za/media/images/map/fs_roll.gif", "http://www.sanatural.co.za/media/images/map/fs_state.gif", "http://www.sanatural.co.za/media/images/map/gt_land.gif", "http://www.sanatural.co.za/media/images/map/gt_roll.gif", "http://www.sanatural.co.za/media/images/map/gt_state.gif", "http://www.sanatural.co.za/media/images/map/kzn_land.gif", "http://www.sanatural.co.za/media/images/map/kzn_roll.gif", "http://www.sanatural.co.za/media/images/map/kzn_state.gif", "http://www.sanatural.co.za/media/images/map/lp_land.gif", "http://www.sanatural.co.za/media/images/map/lp_roll.gif", "http://www.sanatural.co.za/media/images/map/lp_state.gif", "http://www.sanatural.co.za/media/images/map/mp_land.gif", "http://www.sanatural.co.za/media/images/map/mp_roll.gif", "mp_state.gif", "http://www.sanatural.co.za/media/images/map/nc_land.gif", "http://www.sanatural.co.za/media/images/map/nc_roll.gif", "http://www.sanatural.co.za/media/images/map/nc_state.gif", "http://www.sanatural.co.za/media/images/map/nw_land.gif", "http://www.sanatural.co.za/media/images/map/nw_roll.gif", "http://www.sanatural.co.za/media/images/map/nw_state.gif", "http://www.sanatural.co.za/media/images/map/wc_land.gif", "http://www.sanatural.co.za/media/images/map/wc_roll.gif", "http://www.sanatural.co.za/media/images/map/wc_state.gif"], 
     imageFolder = [], 
     loaded = [], 
     loadedCounter = 0; 

    this.loadImgs = function() { 
     for (var i = 0; i < docImages.length; i++) { 
      imageFolder[i] = new Image(); 
      imageFolder[i].src = docImages[i]; 
      loaded[i] = false; 
     } 
     intervalId = setInterval(loadedCheck, 10); // 
    }; 

    function loadedCheck() { 
     if (loadedCounter == imageFolder.length) { // all images have been preloaded 
      clearInterval(intervalId); 
      alert('All images have been preloaded!'); 
      return; 
     } 

     for (var i = 0; i < imageFolder.length; i++) { 
      if (loaded[i] === false && imageFolder[i].complete) { 
       loaded[i] = true; 
       loadedCounter++; 
       alert(i); // (work fine in FF but i.e goes from 19 to 21) 
      } 
     } 
    } 
}; 


var preloadObject = new preLoad(); 

preloadObject.loadImgs(); 
+1

@abatishchev:你为什么删除所有的绝对网址?这明显改变了代码 – 2010-05-24 12:15:52

回答

3

这样做的原因是,在指数20的产品"mp_state.gif" - 它缺少完整的URL。 因此,图像未加载,.complete属性设置为false,因此循环跳过此项目。

+0

非常感谢,我已经多次阅读了这段代码,甚至创建了一个例外,即Thanks。 – 2010-05-24 12:19:47

+1

请记住标记为解决方案:) – 2010-05-24 12:20:33