图片懒加载的核心是按需加载,即初始化时仅加载可视区图片,滚动至附近再加载其余图片,以减少首屏请求、提升渲染速度并节省带宽;关键依赖JavaScript检测元素是否进入视口,推荐使用Intersection Observer API,兼容方案为getBoundingClientRect或节流的scroll监听;实现上用data-src存真实地址、src设占位图,进入视口后替换并停止观察。
图片懒加载的核心是“按需加载”——页面初始化时只加载可视区域内的图片,其余图片等到用户滚动到附近再加载。这样能减少首屏请求、加快渲染速度、节省带宽。
浏览器本身不自动识别“图片是否可见”,需要 JavaScript 主动检测。常用方法有:
懒加载不是“不加载”,而是延迟加载。通常做法是:
不用第三方库,几行代码就能跑起来:
const lazyImages = document.querySelectorAll('img[data-src]');
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
img.removeAttribute('data-src');
observer.unobserve(img); // 加载完就停止观察
}
});
});
lazyImages.forEach(img => observer.observe(img));
基本上就这些。原理不复杂,但容易忽略节流、错误处理和兼容策略。