首页 > 技术文章 > 图片懒加载实现

Auyuer 2017-12-28 11:38 原文

  •   在现在很多网站上,在图片加载时均采用了懒加载的方式,当页面被请求时,只加载可视区域的图片,其它部分的图片则不加载
  •   而当这些图片出现在可视区域时才会动态加载这些图片,从而提高了初次加载的速度,优化了网页性能

具体实现方法如下:

 HTML代码

/*现将src为空,自定义属性存放图片路径,图片进入可视区范围内时,动态将路径赋给src*/
<div id="div">
    <img src="" data-src="img/1.jpg">
    <img src="" data-src="img/2.jpg">
    <img src="" data-src="img/3.jpg">
    <img src="" data-src="img/4.jpg">
    <img src="" data-src="img/5.jpg">
</div>

css代码  这里只是简单的设置了一下样式

 1 div{
 2        width:550px;
 3          height:420px;
 4             margin:20px auto;
 5         }
 6         img {
 7             display: block;
 8             width: 550px;
 9             height: 420px;
10         }

 

javascript代码

 1 window.onload=function(){
 2        lazy();
 3 //网页加载时先默认加载当前可视区窗口的图片
 4     };
 5     document.onscroll =function(){
 6         lazy();
 7     };
 8 
 9     function lazy(){
10         var aImg = document.querySelectorAll('img');
11         var len = aImg.length;
12         var n = 0;
13     //存储图片加载到的位置,避免每次都从第一张图片开始遍历
14             var seeHeight = document.documentElement.clientHeight; 
15     // 网页可视区高度
16             var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
17             //同时使用其中一个为0,另一个生效   兼容不同浏览器    滚轮滚一下100px
18             for (var i = n; i < len; i++) {
19                 if (aImg[i].offsetTop <= seeHeight + scrollTop) {    //offsetTop 元素距离页面顶部的距离
20                     if (aImg[i].getAttribute('src') == '') {
21                         aImg[i].src = aImg[i].getAttribute('data-src');
22                     }
23                     n = i + 1;
24                 }
25             }
26         }        

 

推荐阅读