1、HTML5自定义属性data-前缀,data-
固定写法 data-name
name自定义,如下面的data-src
( dataset
)
先将img标签的src链接设为同一张图片(比如空白图片),然后给img标签设置自定义属性(比如 data-src),然后将真正的图片地址存储在data-src中,当JS监听到该图片元素进入可视窗口时,将自定义属性中的地址存储到src属性中。达到懒加载的效果。
<div id="box">
<ul>
<li>
<img data-src="./图片懒加载/1.jpg" alt="">
</li>
<li>
<img data-src="./图片懒加载/2.jpg" alt="">
</li>
<li>
<img data-src="./图片懒加载/3.jpg" alt="">
</li>
</div>
- 判断条件
window.innerHeight
可以获取到这个窗口的高度(不包括工具栏和滚动条)。getBoundingClientRect()
方法用来获取页面中某个元素的左、上、右、下分别相对浏览器视窗的位置,返回的是一个矩形对象,包括四个属性,分别是left 、top、right、bottom。分别表示元素各边与页面上边和左边的距离。
基本的判断就是如果该图片距离窗口上方的位置小于窗口的高度(也就是说该图片已经进入了窗口),那么就将该图片的src属性赋为data-src找那个存的图片路径。
然后全局绑定scroll事件,在滚动页面的时候,图片进入到窗口后,500ms之后才会显示出图片。
<script>
function imgonload() {
let img = document.querySelectorAll("img");
/*console.log(img);*/
for(let i=0; i<img.length; i++) {
if(img[i].getBoundingClientRect().top < window.innerHeight) {
//图片一旦有src就会加载出来,所以图片的路径不会放在src中,而是一个自定义的属性data-src中
img[i].src = img[i].dataset.src;
}
}
}
//防抖函数
function scollImg(fn) {
let timer = null;
let context = this;
return function () {
clearTimeout(timer);
timer = setTimeout(() => {
fn.apply(context);
}, 500)
}
}
window.onload = imgonload;
window.onscroll = scollImg(imgonload);
</script>