把网页里的img标签里的src替换成data-src,img标签没有src属性就不会向浏览器发出请求
// 获取到浏览器顶部的距离
function getTop(elem){
var elemTop=elem.offsetTop;//获得elem元素距相对定位的父元素的top
elem=elem.offsetParent;//将elem换成起相对定位的父元素
while(elem!=null){//只要还有相对定位的父元素
//获得父元素 距他父元素的top值,累加到结果中
elemTop+=elem.offsetTop;
//再次将elem换成他相对定位的父元素上;
elem=elem.offsetParent;
}
return elemTop;
}
// 懒加载实现
function lazyload(imgs){
// 可视区域高度
var h = window.innerHeight;
//滚动区域高度
var s = document.documentElement.scrollTop || document.body.scrollTop;
for(var i=0;i<imgs.length;i++){
//图片距离顶部的距离大于可视区域和滚动区域之和时懒加载
//加800是为了让图片在距可显示的地方800px的距离就开始加载而不是到了显示的地方现加载
if ((h+s+800)>getTop(imgs[i])) {
// 真实情况是页面开始有2秒空白,所以使用setTimeout定时2s
(function(i){
// setTimeout(function(){
// 不加立即执行函数i会等于9
// 隐形加载图片或其他资源,
//创建一个临时图片,这个图片在内存中不会到页面上去。实现隐形加载
var src = imgs[i].getAttribute('data-src');
if (src == null) return false;//不知到为什么src有时为null
var temp = new Image();
temp.src = src;//只会请求一次
// onload判断图片加载完毕,真是图片加载完毕,再赋值给dom节点
temp.onload = function(){
// 获取自定义属性data-src,用真图片替换假图片
imgs[i].src = imgs[i].getAttribute('data-src')
}
// },2000)
})(i)
}
}
}
lazyload(imgs);
在滚动事件里监听图片是否到了该显示的地方
$(document).scroll(function() {
lazyload(imgs);
})
版权声明:本文为lixu102593原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。