← 返回首页
方案一:原生
怎么实现图片懒加载
核心原理
懒加载的本质是:图片初始不加载真实资源,当图片进入可视区域时,再触发加载。
具体做法:
<img> 的 src 先指向一张占位图(或为空),真实地址存在 data-src 中,等图片进入视口时,把 data-src 的值赋给 src。三种实现方案(由优到劣)
方案一:原生 loading="lazy"(首选)
<img src="image.jpg" loading="lazy" alt="描述" />
一句话:现代浏览器原生支持,零代码成本,面试时先提这个体现你对新特性的了解。
方案二:Intersection Observer API(主流方案)
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
observer.unobserve(img); // 加载后停止观察
}
});
}, { rootMargin: '50px' }); // 提前预加载
document.querySelectorAll('.lazy').forEach(img => observer.observe(img));