基于javascript实现图片懒加载
一、定义
图片延迟加载也称为懒加载,延迟加载图片或符合某些条件时才加载某些图片,通常用于图片比较多的网页。可以减少请求数或者延迟请求数,优化性能。
二、呈现形式
【1】延时加载,使用setTimeout或setInterval进行加载延迟,如果用户在加载前就离开,自然就不会进行加载。
【2】条件加载,符合某些条件或者触发了某些条件才开始异步加载。
【3】可视区域加载,仅仅加载用户可以看到的区域,这个主要监控滚动条来实现,一般距离用户看到的底边很近的时候开始加载,这样能保证用户下拉时图片正好接上,不会有太长时间的停顿。
三、基本步骤
【1】网页中的图片都设为同一张图片
【2】给图片增加data-original="img/test.jpg"的属性,保存图片的真实地址
【3】当触发某些条件时,自动改变该区域的图片的src属性为真实的地址
四、应用
1、点击按钮显示图片
<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8">
<title>Document</title>
<style>
body{
margin:0;
}
img{
height:100px;
width:100px;
}
</style>
</head>
<body>
<button>加载图片</button>
<imgsrc="#"alt="测试"data-original="img/test.png">
<script>
varoBtn=document.getElementsByTagName('button')[0];
varoImg=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"));
}
}
functionaftLoadImg(obj,url){
varoImg=newImage();
oImg.onload=function(){
obj.src=oImg.src;
}
oImg.src=url;
}
</script>
</body>
</html>
2、可视区显示图片
<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="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:1pxsolidblack;
margin:10px;
text-align:center;
height:400px;
width:400px;
float:left;
}
.inimg{
height:400px;
width:400px;
}
</style>
</head>
<body>
<ulclass="list">
<liclass="in"><imgsrc="img/loading.gif"alt="测试"data-original="img/img1.gif"></li>
<liclass="in"><imgsrc="img/loading.gif"alt="测试"data-original="img/img2.gif"></li>
<liclass="in"><imgsrc="img/loading.gif"alt="测试"data-original="img/img3.gif"></li>
<liclass="in"><imgsrc="img/loading.gif"alt="测试"data-original="img/img4.gif"></li>
<liclass="in"><imgsrc="img/loading.gif"alt="测试"data-original="img/img1.gif"></li>
<liclass="in"><imgsrc="img/loading.gif"alt="测试"data-original="img/img2.gif"></li>
<liclass="in"><imgsrc="img/loading.gif"alt="测试"data-original="img/img3.gif"></li>
<liclass="in"><imgsrc="img/loading.gif"alt="测试"data-original="img/img4.gif"></li>
</ul>
<script>
varoBtn=document.getElementsByTagName('button')[0];
varaImages=document.images;
loadImg(aImages);
window.onscroll=function(){
loadImg(aImages);
};
functionloadImg(arr){
for(vari=0,len=arr.length;i<len;i++){
if(arr[i].getBoundingClientRect().top<document.documentElement.clientHeight&&!arr[i].isLoad){
arr[i].isLoad=true;
arr[i].style.cssText="transition:'';opacity:0;"
if(arr[i].dataset){
aftLoadImg(arr[i],arr[i].dataset.original);
}else{
aftLoadImg(arr[i],arr[i].getAttribute("data-original"));
}
(function(i){
setTimeout(function(){
arr[i].style.cssText="transition:1s;opacity:1;"
},16)
})(i);
}
}
}
functionaftLoadImg(obj,url){
varoImg=newImage();
oImg.onload=function(){
obj.src=oImg.src;
}
oImg.src=url;
}
</script>
</body>
</html>
以上就是本文的全部内容,希望对大家的学习有所帮助,顺利实现javascript图片懒加载。