目前,网络上各大论坛,尤其是一些图片类型的网站上,在图片加载时均采用了一种名为懒加载的方式,具体表现为,当页面被请求时,只加载可视区域的图片,其它部分的图片则不加载,只有这些图片出现在可视区域时才会动态加载这些图片,从而节约了网络带宽和提高了初次加载的速度。下面来介绍两种方法:
HTML代码:
<ul>
<li data-src="http://lihua1108.com/images/goat1.jpeg"></li>
<li data-src="http://lihua1108.com/images/goat2.jpeg"></li>
<li data-src="http://lihua1108.com/images/goat1.jpeg"></li>
<li data-src="http://lihua1108.com/images/goat2.jpeg"></li>
<li data-src="http://lihua1108.com/images/goat1.jpeg"></li>
<li data-src="http://lihua1108.com/images/goat2.jpeg"></li>
<li data-src="http://lihua1108.com/images/goat1.jpeg"></li>
<li data-src="http://lihua1108.com/images/goat2.jpeg"></li>
<li data-src="http://lihua1108.com/images/goat1.jpeg"></li>
<li data-src="http://lihua1108.com/images/goat2.jpeg"></li>
<li data-src="http://lihua1108.com/images/goat1.jpeg"></li>
<li data-src="http://lihua1108.com/images/goat2.jpeg"></li>
<li data-src="http://lihua1108.com/images/goat1.jpeg"></li>
<li data-src="http://lihua1108.com/images/goat2.jpeg"></li>
<li data-src="http://lihua1108.com/images/goat1.jpeg"></li>
<li data-src="http://lihua1108.com/images/goat2.jpeg"></li>
</ul>
</div>
js代码:
var oDiv=document.getElementById("div1")
var oUl=oDiv.children[0];
var aLi=oUl.children;
if (aLi[index].dataset) {
var src=aLi[index].dataset.src;
} else{
var src=aLi[index].getAttribute('data-src');
}
var oImg=document.createElement('img');
oImg.src=src;
if (aLi[index].children.length==0) {
aLi[index].appendChild(oImg);
}
}
//获得对象距离页面顶端的距离
function getH(obj) {
var h = 0;
while (obj) {
h += obj.offsetTop;
obj = obj.offsetParent;
}
return h;
}
//当网页的滚动条滚动时要时时判断当前li的位置!
window.onscroll = function () {
var oDiv = document.getElementById('div1');
var oUl = oDiv.children[0];
var aLi = oUl.children;for (var i = 0, l = aLi.length; i < l; i++) {
var oLi = aLi[i];
//检查oLi是否在可视区域
var t = document.documentElement.clientHeight + (document.documentElement.scrollTop || document.body.scrollTop);
var h = getH(oLi);
if (h < t) {
setTimeout("setImg(" + i + ")", 500);
}
}};
//当页面加载完成以后要主动运行一下window.onscroll,从而获得当前可视范围内的图片
window.onload = function () {
window.onscroll();
};
html代码:
js代码:
具体参数解析:
1,用图片提前占位 placeholder : "img/grey.gif", 参数:placeholder,值为某一图片路径.此图片用来占据将要加载的图片的位置,待图片加载时,占位图则会隐藏
2,载入使用何种效果 effect : "fadeIn", 参数:effect(特效),值有show(直接显示),fadeIn(淡入),slideDown(下拉)等,常用fadeIn
3,提前开始加载 threshold : 200, 参数:threshold,值为数字,代表页面高度.如设置为200,表示滚动条在离目标位置还有200的高度时就开始加载图片,可以做到不让用户察觉.
4,事件触发时才加载 event : "click", 参数:event,值有click(点击),mouseover(鼠标划过),sporty(运动的),foobar(…).可以实现鼠标莫过或点击图片才开始加载,后两个值未测试…
5,对某容器中的图片实现效果 Container: $("#container"), 参数:container,值为某容器.lazyload默认在拉动浏览器滚动条时生效,这个参数可以让你在拉动某DIV的滚动条时依次加载其中的图片
6,图片排序混乱时 failurelimit : 10, 参数:failurelimit,值为数字.lazyload默认在找到第一张不在可见区域里的图片时则不再继续加载,但当HTML容器混乱的时候可能出现可见区域内图片并没加载出来的情况,failurelimit意在加载N张可见区域外的图片,以避免出现这个问题
源代码文件下载:方法二下载