图片懒加载——介绍

图片懒加载 

定义 



图片延迟加载也称为懒加载,延迟加载图片或符合某些条件时才加载某些图片,通常用于图片比较多的网页。可以减少请求数或者延迟请求数,优化性能。 
  
呈现形式 



【1】延时加载,使用setTimeout或setInterval进行加载延迟,如果用户在加载前就离开,自然就不会进行加载。 
【2】条件加载,符合某些条件或者触发了某些条件才开始异步加载。 
【3】可视区域加载,仅仅加载用户可以看到的区域,这个主要监控滚动条来实现,一般距离用户看到的底边很近的时候开始加载,这样能保证用户下拉时图片正好接上,不会有太长时间的停顿。 
  
基本步骤 



【1】网页中的图片都设为同一张图片 
【2】给图片增加data-original = "img/test.jpg"的属性,保存图片的真实地址 
【3】当触发某些条件时,自动改变该区域的图片的src属性为真实的地址 
  

应用 



【点击按钮显示图片】 
<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="UTF-8"> 
<title>Document</title> 
<style> 
body{ 
    margin: 0; 

img{ 
    height: 100px; 
    width: 100px; 

</style> 
</head> 
<body> 
<button>加载图片</button> 
<img src="#" alt="测试" data-original = "img/test.png"> 
<script> 
var oBtn = document.getElementsByTagName('button')[0]; 
var oImg = document.images[0];     
oBtn.onclick = function(){ 
    oImg.src = "img/loading.gif"; 
    if(oImg.dataset){ 
        aftLoadImg(oImg,oImg.dataset.original);     
    }else{ 
        aftLoadImg(oImg,oImg.getAttribute("data-original")); 
    } 

function aftLoadImg(obj,url){ 
    var oImg = new Image(); 
    oImg.onload = function(){ 
        obj.src = oImg.src; 
    } 
    oImg.src = url; 

</script>     
</body> 

</html> 

【可视区显示图片】 

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="UTF-8"> 
<title>Document</title> 
<style> 
body{ 
    margin: 0; 

ul{ 
    margin: 0; 
    padding: 0; 
    list-style: none; 

img{ 
    border: none; 
    vertical-align: middle; 

.in{ 
    border: 1px solid black; 
    margin: 10px; 
    text-align: center; 
    height: 400px; 
    width: 400px; 
    float: left; 

.in img{ 
    height: 400px; 
    width: 400px; 

</style> 
</head> 
<body> 
<ul class="list"> 
    <li class="in"><img src="img/loading.gif" alt="测试" data-original = "img/img1.gif"></li> 
    <li class="in"><img src="img/loading.gif" alt="测试" data-original = "img/img2.gif"></li> 
    <li class="in"><img src="img/loading.gif" alt="测试" data-original = "img/img3.gif"></li> 
    <li class="in"><img src="img/loading.gif" alt="测试" data-original = "img/img4.gif"></li>     
    <li class="in"><img src="img/loading.gif" alt="测试" data-original = "img/img1.gif"></li> 
    <li class="in"><img src="img/loading.gif" alt="测试" data-original = "img/img2.gif"></li> 
    <li class="in"><img src="img/loading.gif" alt="测试" data-original = "img/img3.gif"></li> 
    <li class="in"><img src="img/loading.gif" alt="测试" data-original = "img/img4.gif"></li>                           
</ul> 

<script> 
var oBtn = document.getElementsByTagName('button')[0]; 
var aImages = document.images; 
loadImg(aImages); 
window.onscroll = function(){ 
    loadImg(aImages); 
}; 
function loadImg(arr){ 
    for( var i = 0,len = arr.length; i < len; i++){ 
        if(arr.getBoundingClientRect().top < document.documentElement.clientHeight && !arr.isLoad){ 
            arr.isLoad = true; 
            arr.style.cssText = "transition: ''; opacity: 0;" 
            if(arr.dataset){ 
                aftLoadImg(arr,arr.dataset.original);     
            }else{ 
                aftLoadImg(arr,arr.getAttribute("data-original")); 
            } 
            (function(i){ 
                setTimeout(function(){ 
                    arr.style.cssText = "transition: 1s; opacity: 1;" 
                },16) 
            })(i); 
        } 
    } 

function aftLoadImg(obj,url){ 
    var oImg = new Image(); 
    oImg.onload = function(){ 
        obj.src = oImg.src; 
    } 
    oImg.src = url; 


</script>     
</body> 
</html> 

【效果展示】 

 不能在文章中显示效果,只能自己去测试下了 

:以上,是用js 自己写的图片懒加载,可以了解懒加载的原理. 当然你也可以直接使用相关插件,如:lazyload.js 

好的代码像粥一样,都是用时间熬出来的 

 原文:http://www.cnblogs.com/xiaohuochai/p/4859899.html

posted @ 2017-09-26 09:17  golddemon  阅读(402)  评论(0编辑  收藏  举报