javascript懒加载图片的核心是按需加载+交互动态渲染,通过intersectionobserver监听视口可见性,用data-src缓存真实url,待元素进入视口(rootmargin: '50px')时再赋值src并停止观察。

JavaScript 处理后端返回的图片数组并实现懒加载展示,核心是“按需加载 + 交互动态渲染”,不提前请求所有图片,而是等图片进入视口时再加载。关键在于结合 IntersectionObserver 监听可见性,并用 data-src 缓存真实地址,避免初始请求。
1. 后端返回图片数组的典型结构
假设接口返回类似这样的 JSON:
{
"images": [
{"id": 1, "url": "/api/img/1.jpg", "alt": "风景1"},
{"id": 2, "url": "/api/img/2.jpg", "alt": "风景2"},
{"id": 3, "url": "/api/img/3.jpg", "alt": "风景3"}
]
}
注意:URL 可以是绝对路径、相对路径,或需要拼接 base URL 的路径(如 https://cdn.example.com/ + url)。建议后端统一返回可直接用于 <img src> 的完整 URL,减少前端拼接出错风险。
2. 渲染占位结构(不加载图片)
拿到数据后,先生成带 data-src 和 loading="lazy" 的 <img> 标签,但不设 src(或设为极小占位图如 data:image/svg+xml,...),防止默认加载:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 用
document.createElement('img')或模板字符串生成 DOM -
src留空或设为 1×1 透明 GIF(兼容老浏览器) - 把真实地址存在
data-src,alt 文字设上 - 添加
class="lazy-img"方便后续观察
示例代码片段:
function renderImageList(images) {
const container = document.getElementById('image-list');
container.innerHTML = images.map(img => `
<div class="img-item">
@@##@@
</div>
`).join('');
}
3. 用 IntersectionObserver 实现懒加载逻辑
创建观察器,监听所有 .lazy-img 元素是否进入视口。一旦可见,就将 data-src 赋给 src,并可选地移除观察(避免重复触发):
- 设置
rootMargin: '50px'提前 50px 开始加载,提升流畅感 - 加载成功后替换
src,同时可加load事件处理加载完成(如加 fade-in 动画) - 加载失败时可 fallback 到占位图或显示错误提示
基础实现:
const lazyObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
const src = img.dataset.src;
if (!src) return;
img.src = src; // 触发真实加载
img.classList.add('loaded'); // 可用于 CSS 过渡
// 加载完成后停止观察该元素(可选)
lazyObserver.unobserve(img);
}
});
}, { rootMargin: '50px' });
// 初始化:观察所有已存在的懒加载图片
document.querySelectorAll('.lazy-img').forEach(img => lazyObserver.observe(img));
4. 补充优化点
-
响应式图片支持:如果后端返回多尺寸(如
url_320,url_768),可用srcset+sizes属性替代单一src -
错误兜底:监听
img.onerror,加载失败时显示默认图或文案 -
骨架屏/加载状态:在
data-src设置前,用 CSS 骨架(skeleton)或 loading spinner 占位 -
服务端渲染友好:若使用 SSR(如 Next.js/Nuxt),需在客户端 hydrate 后再初始化 Observer,避免服务端无
window报错
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










