方法一:IntersectionObserver
IntersectionObserver
提供了一种异步观察目标元素与其祖先元素或顶级文档视口(viewport)交叉状态的方法。其祖先元素或视口被称为根(root)。
const observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { // intersectionRatio if (entry.isIntersecting) { const img = entry.target; img.src = img.dataset.src; observer.unobserve(img); } }); }); observer.observe(img);
提供的方法
- observe: 开始监听一个目标元素
- disconnect: 停止监听目标
- unobserve: 停止监听特定的元素
- takeRecords:返回所有观察目标的数组
方法二:Lazy
img
元素有一个loading
属性,设置为lazy
时浏览器会自动懒加载图片。
<img src="abc.png" loading="lazy" />