(function () {
var imgList = [], delay=350, offset=50;
// 入口函数,通过选择器获得imgList,调用loadImg()加载函数
function imgLoad(selector) {
var _selector = selector || '.imgLazyLoad';
let nodes = document.querySelectorAll(_selector);
imgList = Array.apply(null, nodes);
window.addEvenetListener('scroll', debounce(loadImg, delay), false);
}
// 防抖函数,控制函数执行频次
function debounce(fn, delay) {
var timer = null;
return function() {
var context = this;
var args = arguments;
if(timer) {
clearTimeout(timer);
timer = null;
}
timer = setTimeout(function() {
fn.apply(context, args);
}, delay);
}
}
// 加载图片
function loadImg() {
for(let i=0; i < imgList.length; i++) {
if(isShow(imgList[i])) {
imgList[i].src = imgList.getAttribute('data-src');
imgList.splice(i, 1);
i--;
}
}
}
// 判断元素是否在可视区域
function isShow(el) {
let coords = el.getBoundingClientRect(); // 返回元素在可视窗口内的坐标
let clientHeight = (document.documentElement.clientHeight || window.innerHeight) + parseFloat(offset);
return (coords.left >=0 && coords.top <= clientHeight);
}
imgLoad('.imgLazyLoad');
})();