原理
在图片出现在视口市更换默认图片的src地址
HTML代码
<img src="./0.jpg" />
<img src="./0.jpg" />
<img src="./0.jpg" />
<img src="./0.jpg" />
<img src="./0.jpg" />
<img src="./0.jpg" />
<img src="./0.jpg" />
<img src="./0.jpg" />
<img src="./0.jpg" />
<img src="./0.jpg" />
<img src="./0.jpg" />
<img src="./0.jpg" />
<img src="./0.jpg" />
<img src="./0.jpg" />
<img src="./0.jpg" />
<img src="./0.jpg" />
<img src="./0.jpg" />
<img src="./0.jpg" />
<img src="./0.jpg" />
<img src="./0.jpg" />
js代码
function lazyload() {
//获取图片列表
const imagesList = document.getElementsByTagName("img");
var length = imagesList.length; // 一共有多少张图片
var n = 0; // n用来保存之前已经加载过的多少张图片,就可减少下面遍历的次数
return function () {
console.log("dddd");
var clientHeight = document.documentElement.clientHeight; // 浏览器可视区域的高度
var scrollTop = document.documentElement.scrollTop; // 页面被遮挡的高度
console.log(n);
for (let i = n; i < imagesList.length; i++) {
console.log(n);
if (imagesList[i].offsetTop < clientHeight + scrollTop) {
if (imagesList[i].getAttribute("src") === "./0.jpg") {
//当该img的路径为'./loading.png'时才把图片的真实路径赋值给src
imagesList[i].src = `./${i + 1}.jpg`;
}
n++;
} else {
break;
}
}
};
}
const init = new lazyload();
init();
window.addEventListener("scroll", init, false); // 监听页面滚动事件,执行lazyload函数。
小知识--闭包
概念
定义在函数内部的函数
能读取其他函数内部变量的函数
可以将函数内部和函数外部连接起来
用途
可以读取函数内部变量
让这些变量的值始终保持在内存中
缺点
内存占用大、可能会导致内存泄漏
会在父函数外部改变父函数内部变量的值