图片预加载:
var img=new Image();
img.src="AAA.jpg";
img.src="BBB.jpg";
img.src="CCC.jpg";
对于这种预加载的方式,我想请问是先加载完AAA,再执行img.src="BBB.jpg";以及后面的语句,还是一边加载一边执行呢?
如果是后者,我想请问,如果img.src="BBB.jpg";加载BBB的时候,前面的AAA还没加载完,那会出现冲突么?
请指教!~谢谢~~~

解决方案 »

  1.   

    楼主清空浏览器缓存后试下下面的代码:<html>
    <head>
    </head>
    <body>
    <script>
    var startTime,endTime; 
    var d=new Date(); 
    startTime=d.getTime(); var img=new Image();
    img.src="http://img4.cache.netease.com/photo/0001/2010-11-14/900x600_6LENIIP605RQ0001.jpg";
    img.src="http://img3.cache.netease.com/photo/0001/2010-11-14/900x600_6LENILTG05RQ0001.jpg";
    img.src="http://img4.cache.netease.com/photo/0086/2010-11-25/6MBC5I5Q49NE0086.jpg";
    img.src="http://img3.cache.netease.com/photo/0086/2010-11-25/6MBD3J6849NE0086.jpg";
    img.src="http://img4.cache.netease.com/photo/0086/2010-11-25/6MBFBEBG49NE0086.jpg";d=new Date();
    endTime=d.getTime();
    document.write((endTime-startTime)/1000);
    </script>OK
    </body>
    </html>
    再看下浏览器缓存,结果只下载了最后一张图片。我是在IE8下测试的。所以这样做预加载恐怕不行吧.
    用比较傻的方法可以这样:
    var img1=new Image(); img1.src="图片地址";
    var img2=new Image(); img2.src="图片地址";
    var img3=new Image(); img3.src="图片地址";
    var img4=new Image(); img4.src="图片地址";

    我也是刚试过的,不知道理论是否跟我测试的结果一样。
      

  2.   

    new Image().src = "a.jpg";
    new Image().src = "b.jpg";
    new Image().src = "c.jpg";
      

  3.   


    我刚刚试了下,好像的确是你所说的那样.
    既然是这样的话,我想问问,意思是不是:
    同一个Image对象,连续发出加载请求,那么如果前面的请求还没完成的话,后面的请求会把前面的请求取消吗?因此最后才会只加载最后一个图像?
    请指教!~谢谢~~
      

  4.   

    JQ 1.4已经出来了预加载图片
    $(document).ready(function() {     
     
      jQuery.preloadImages = function()     
      {     
         for(var i = 0; i").attr("src", arguments[i]);    
     
      }    
    };    
    // how to use    
    $.preloadImages("image1.jpg");     
    });   
    jQuery延时加载功能
    $(document).ready(function() { 
        window.setTimeout(function() { 
        // do something 
         }, 1000); 
    });   
    点击这里.还有更多
      

  5.   

    一个img连续发送请求,如果前面的请求没有完成,会abort,转而执行后面的请求,如果请求完成了,会触发onload事件
      

  6.   

    最好通过setTimeout进行队列延时预加载。SUCH AS:function $(o){
            return document.getElementById(o) || o 
    }
    $.ImagerProLoad = function() {
            var arr = Array.prototype.slice.call(arguments),
            Img = new Image(), Idx = 0, Max = arr.length- 1;
            Img.src = arr[Idx];
            Img.onload = function() { 
                 Idx ++;
                 Idx < Max ? function() {
                       setTimeout(function(){Img.src = arr[Idx]}, 5);//取消该延时,会造成堆栈溢出。
                 }() : function() { 
                       typeof arr[Max] == "function" && arr.pop()(arr) || eval(arr.pop()).apply(arr);
                       Img = null;
                       return
                 }();
           }    
    }调用:
    window.callback = function() {
           //alert(this); 
           do someth. 
           ..........
    }
    $.ImagerProLoad("1.jpg","2.jpg","3.jpg","4.jpg","5.jpg","6.jpg","7.jpg","8.jpg","callback");
    或者:
    $.ImagerProLoad(
            "1.jpg","2.jpg","3.jpg","4.jpg",
            "5.jpg","6.jpg","7.jpg","8.jpg",
            function(orr){
                 //alert(orr)
                 do someth.
                 ..........
            }
    )
      

  7.   

    我觉得没有必要研究这么细节的东西,只要能在自己的站点上做好用户体验就OK了!比如,在图片没有完全加载完毕时,显示正在加载或者显示一张LOADING图片,加载完毕后立刻显示图片!传统应用上,会比较慢图片是一点一点的拖出来的。效果不太好!
      可以考虑用JQ的ImagesLazyLoad插件。效果还不错!