js中图片的预加载演示

 1 <!DOCTYPE HTML>
 2 <html>
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 5 <title>无标题文档</title>
 6 <script>
 7 window.onload = function() {
 8     
 9     var oImg = document.getElementById('img1');
10     
11     var oImage = new Image();
12     
13     var arr = [
14         'http://d.hiphotos.baidu.com/image/w%3D2048/sign=2846dc1369600c33f079d9c82e74500f/a044ad345982b2b7938726c333adcbef76099b98.jpg',
15         'http://f.hiphotos.baidu.com/image/w%3D2048/sign=2da141ad013b5bb5bed727fe02ebd439/7dd98d1001e9390124aacd3879ec54e736d1960f.jpg',
16         'http://g.hiphotos.baidu.com/image/w%3D2048/sign=5e067f12a918972ba33a07cad2f57b89/b8014a90f603738d27674f24b11bb051f819ec83.jpg',
17         'http://f.hiphotos.baidu.com/image/w%3D2048/sign=fc9023a7d343ad4ba62e41c0b63a5baf/4bed2e738bd4b31ca2a24ab985d6277f9e2ff812.jpg',
18         'http://f.hiphotos.baidu.com/image/w%3D2048/sign=99191869cebf6c81f7372be88806b035/9345d688d43f8794a159b42fd01b0ef41bd53a08.jpg',
19         'http://a.hiphotos.baidu.com/image/w%3D2048/sign=4aaddd39718da9774e2f812b8469f919/8b13632762d0f70391b28bd60afa513d2697c5b3.jpg',
20         'http://g.hiphotos.baidu.com/image/w%3D2048/sign=50df8b2efffaaf5184e386bfb86c95ee/fc1f4134970a304ebbdb83f2d3c8a786c9175c38.jpg'
21     ];
22     
23     var iCur = 0;
24     var i = 0;
25     
26     xunlei();
27     
28     oImg.onclick = function() {
29         i++;
30         if (i < arr.length) {
31             oImg.src = arr[i];
32         }
33     }
34     
35     function xunlei() {
36         oImage.src = arr[iCur];
37         oImage.onload = function() {
38             iCur++;
39             if (iCur < arr.length) {
40                 xunlei();    //递归
41             }
42             document.title = iCur + ' / ' + arr.length;
43         }
44     }
45     
46 }
47 </script>
48 </head>
49 
50 <body>
51     <img src="http://b.hiphotos.baidu.com/image/w%3D2048/sign=526ef7bda41ea8d38a227304a332314e/1ad5ad6eddc451dae05f4cedb4fd5266d016320e.jpg" id="img1" style=" 300px;" />
52 </body>
53 </html>

当前页思路:图片数据存储在数组中。当打开页面后,先加载第一张图片,给用户查看,同时去加载剩下的图片,而不是一次性加载所有的图片。

被加载的图片放在浏览器缓存里,如果没有操作,并不会影响页面的呈现。只有我们去调用加载进来的图片的src属性时,才会用到缓存中的图片。

接下来,我们看一个图片按需加载的实例:

  1 <!DOCTYPE HTML>
  2 <html>
  3 <head>
  4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5 <title>无标题文档</title>
  6 <style>
  7 #ul1 {margin: 100px auto 0; padding: 0;}
  8 li {float: left; margin:0 0 10px 10px; list-style:none; border: 1px solid black;}
  9 img {width: 290px; height: 200px; display: block;}
 10 </style>
 11 <script>
 12 window.onload = function() {
 13     
 14     var oUl = document.getElementById('ul1');
 15     var aImg = oUl.getElementsByTagName('img');
 16     
 17     showImage();
 18     
 19     window.onscroll = showImage;
 20     
 21     function showImage() {
 22         
 23         var scrollTop  = document.documentElement.scrollTop || document.body.scrollTop;
 24         
 25         for (var i=0; i<aImg.length; i++) {
 26             
 27             if ( !aImg[i].isLoad && getTop(aImg[i]) < scrollTop + document.documentElement.clientHeight ) {
 28                 aImg[i].src = aImg[i].getAttribute('_src');
 29                 aImg[i].isLoad = true;
 30             }
 31             
 32         }
 33         
 34     }
 35     
 36     function getTop(obj) {
 37         var iTop = 0;
 38         while(obj) {
 39             iTop += obj.offsetTop;
 40             obj = obj.offsetParent;
 41         }
 42         return iTop;
 43     }
 44     
 45 }
 46 </script>
 47 </head>
 48 
 49 <body>
 50     <ul id="ul1">
 51         <li><img _src="img/1.jpg" src="img/white.JPG" /></li>
 52         <li><img _src="img/2.jpg" src="img/white.JPG" /></li>
 53         <li><img _src="img/3.jpg" src="img/white.JPG" /></li>
 54         <li><img _src="img/4.jpg" src="img/white.JPG" /></li>
 55         <li><img _src="img/5.jpg" src="img/white.JPG" /></li>
 56         <li><img _src="img/6.jpg" src="img/white.JPG" /></li>
 57         <li><img _src="img/7.jpg" src="img/white.JPG" /></li>
 58         <li><img _src="img/1.jpg" src="img/white.JPG" /></li>
 59         <li><img _src="img/2.jpg" src="img/white.JPG" /></li>
 60         <li><img _src="img/3.jpg" src="img/white.JPG" /></li>
 61         <li><img _src="img/4.jpg" src="img/white.JPG" /></li>
 62         <li><img _src="img/5.jpg" src="img/white.JPG" /></li>
 63         <li><img _src="img/6.jpg" src="img/white.JPG" /></li>
 64         <li><img _src="img/7.jpg" src="img/white.JPG" /></li>
 65         <li><img _src="img/1.jpg" src="img/white.JPG" /></li>
 66         <li><img _src="img/2.jpg" src="img/white.JPG" /></li>
 67         <li><img _src="img/3.jpg" src="img/white.JPG" /></li>
 68         <li><img _src="img/4.jpg" src="img/white.JPG" /></li>
 69         <li><img _src="img/5.jpg" src="img/white.JPG" /></li>
 70         <li><img _src="img/6.jpg" src="img/white.JPG" /></li>
 71         <li><img _src="img/7.jpg" src="img/white.JPG" /></li>
 72         <li><img _src="img/1.jpg" src="img/white.JPG" /></li>
 73         <li><img _src="img/2.jpg" src="img/white.JPG" /></li>
 74         <li><img _src="img/3.jpg" src="img/white.JPG" /></li>
 75         <li><img _src="img/4.jpg" src="img/white.JPG" /></li>
 76         <li><img _src="img/5.jpg" src="img/white.JPG" /></li>
 77         <li><img _src="img/6.jpg" src="img/white.JPG" /></li>
 78         <li><img _src="img/7.jpg" src="img/white.JPG" /></li>
 79         <li><img _src="img/1.jpg" src="img/white.JPG" /></li>
 80         <li><img _src="img/2.jpg" src="img/white.JPG" /></li>
 81         <li><img _src="img/3.jpg" src="img/white.JPG" /></li>
 82         <li><img _src="img/4.jpg" src="img/white.JPG" /></li>
 83         <li><img _src="img/5.jpg" src="img/white.JPG" /></li>
 84         <li><img _src="img/6.jpg" src="img/white.JPG" /></li>
 85         <li><img _src="img/7.jpg" src="img/white.JPG" /></li>
 86         <li><img _src="img/1.jpg" src="img/white.JPG" /></li>
 87         <li><img _src="img/2.jpg" src="img/white.JPG" /></li>
 88         <li><img _src="img/3.jpg" src="img/white.JPG" /></li>
 89         <li><img _src="img/4.jpg" src="img/white.JPG" /></li>
 90         <li><img _src="img/5.jpg" src="img/white.JPG" /></li>
 91         <li><img _src="img/6.jpg" src="img/white.JPG" /></li>
 92         <li><img _src="img/7.jpg" src="img/white.JPG" /></li>
 93         <li><img _src="img/1.jpg" src="img/white.JPG" /></li>
 94         <li><img _src="img/2.jpg" src="img/white.JPG" /></li>
 95         <li><img _src="img/3.jpg" src="img/white.JPG" /></li>
 96         <li><img _src="img/4.jpg" src="img/white.JPG" /></li>
 97         <li><img _src="img/5.jpg" src="img/white.JPG" /></li>
 98         <li><img _src="img/6.jpg" src="img/white.JPG" /></li>
 99         <li><img _src="img/7.jpg" src="img/white.JPG" /></li>
100         <li><img _src="img/1.jpg" src="img/white.JPG" /></li>
101         <li><img _src="img/2.jpg" src="img/white.JPG" /></li>
102         <li><img _src="img/3.jpg" src="img/white.JPG" /></li>
103         <li><img _src="img/4.jpg" src="img/white.JPG" /></li>
104         <li><img _src="img/5.jpg" src="img/white.JPG" /></li>
105         <li><img _src="img/6.jpg" src="img/white.JPG" /></li>
106         <li><img _src="img/7.jpg" src="img/white.JPG" /></li>
107     </ul>
108 </body>
109 </html>

浏览器第一次打开页面时,只会加载当前屏幕内的图片(由于这里页面中的img标签是写死的,所以没有用到图片对象)。页面中图片的src属性可以是一个loading.gif图片,真正的图片路径存放在_src属性中。当前屏幕内的图片完成加载后,给当前页内图片添加 isLoad 属性是 true,这样下次再到当前区域内时,由于有这个属性,就不会重复加载这张图片了。

当滚动浏览器滚动条,触发了 window.onscroll 事件后,程序继续执行,会不断加载剩下符合当前区域内的图片。

性能的影响,主要是在for循环中。每次滚动事件发生,都要去执行遍历。

原文地址:https://www.cnblogs.com/zhangxiaohang/p/5553136.html