You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用JavaScript或HTML实现图片懒加载以优化网站加载速度?

图片懒加载实现方案:原生HTML + JavaScript两种方式

嘿,针对你想实现图片懒加载来提升页面速度的需求,我给你推荐两种实用方案,从最简单的原生HTML到更灵活的JavaScript实现,都给你捋清楚~

方案一:原生HTML懒加载(零JS成本,首选)

现在绝大多数现代浏览器(Chrome、Firefox、Edge、Safari 15.4+)都支持原生懒加载,不用写任何JavaScript代码就能实现,简直是懒人福音!

怎么改你的代码?

只需要给<img>标签加上loading="lazy"属性就行,如果想做兼容旧浏览器的降级处理,可以把真实图片地址放在data-src里,默认用一个轻量占位图:

<!-- 基础原生懒加载 -->
<img src="image1.jpg" alt="tempo traveller" loading="lazy">
<img src="image2.jpg" alt="tempo traveller" loading="lazy">

<!-- 带占位图的兼容写法 -->
<img src="placeholder-1x1.png" data-src="image1.jpg" alt="tempo traveller" loading="lazy">
<img src="placeholder-1x1.png" data-src="image2.jpg" alt="tempo traveller" loading="lazy">

优点

  • 完全不用写JS,开发成本极低
  • 浏览器原生优化,性能比很多自定义JS方案更好
  • 自动根据用户的网络情况和设备调整加载时机

方案二:JavaScript实现(兼容旧浏览器/自定义逻辑)

如果你的网站需要兼容老浏览器(比如Safari 15.4之前的版本,或者一些小众浏览器),或者需要自定义懒加载的触发时机(比如图片距离视口还有300px就提前加载),那用JavaScript的Intersection Observer API是最优解(比传统的scroll事件监听性能好太多)。

步骤1:修改HTML结构

把真实图片地址存在data-src属性里,默认用占位图(可以是1x1透明像素,或者低分辨率的模糊预览图),给图片加个类名方便选择:

<img src="placeholder-blur.jpg" data-src="image1.jpg" alt="tempo traveller" class="lazy-image">
<img src="placeholder-blur.jpg" data-src="image2.jpg" alt="tempo traveller" class="lazy-image">

步骤2:编写JavaScript代码

用Intersection Observer监听图片是否进入视口,触发加载:

// 页面加载完成后执行
document.addEventListener('DOMContentLoaded', () => {
  // 选中所有需要懒加载的图片
  const lazyImages = document.querySelectorAll('.lazy-image');

  // 创建观察器实例,配置加载逻辑
  const observer = new IntersectionObserver((entries) => {
    entries.forEach(entry => {
      // 如果图片进入视口
      if (entry.isIntersecting) {
        const img = entry.target;
        // 把真实地址赋值给src
        img.src = img.dataset.src;
        // 加载完成后移除类名,停止观察该图片
        img.classList.remove('lazy-image');
        observer.unobserve(img);
      }
    });
  }, {
    // 可选:设置提前加载的距离,比如图片距离视口200px时就开始加载
    rootMargin: '200px 0px'
  });

  // 开始观察每一张懒加载图片
  lazyImages.forEach(img => observer.observe(img));
});

额外优化建议

  • 给图片设置固定的宽高或者aspect-ratio属性,避免图片加载时的布局偏移(提升Core Web Vitals里的CLS指标)
  • 占位图尽量用体积极小的资源,比如1x1的透明PNG(只有几十字节)
  • 如果是背景图片的懒加载,逻辑类似:给元素加data-bg存真实背景图地址,进入视口时设置element.style.backgroundImage = 'url(' + element.dataset.bg + ')'

内容的提问来源于stack exchange,提问作者Ajay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 06:38:27