当前位置:首页 > JavaScript

js实现懒加载图片

2026-01-30 16:12:04JavaScript

实现懒加载图片的基本原理

懒加载(Lazy Load)是一种优化网页性能的技术,通过延迟加载非视口内的图片,减少页面初始加载时的资源请求。核心原理是监听滚动事件,判断图片是否进入可视区域,再动态设置图片的src属性。

Intersection Observer API 实现

现代浏览器推荐使用IntersectionObserver API,性能优于传统滚动事件监听:

js实现懒加载图片

document.addEventListener('DOMContentLoaded', () => {
  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;
        observer.unobserve(img);
      }
    });
  });

  lazyImages.forEach(img => observer.observe(img));
});

HTML结构需配合data-src属性:

<img data-src="actual-image.jpg" alt="Lazy loaded image">

传统滚动事件实现

兼容旧浏览器的方案,需手动计算元素位置:

js实现懒加载图片

function lazyLoad() {
  const lazyImages = document.querySelectorAll('img[data-src]');
  const windowHeight = window.innerHeight;

  lazyImages.forEach(img => {
    const rect = img.getBoundingClientRect();
    if (rect.top < windowHeight + 100) { // 提前100px加载
      img.src = img.dataset.src;
      img.removeAttribute('data-src');
    }
  });
}

document.addEventListener('DOMContentLoaded', lazyLoad);
window.addEventListener('scroll', lazyLoad);
window.addEventListener('resize', lazyLoad);

优化建议

添加加载占位图和错误处理:

<img data-src="image.jpg" src="placeholder.jpg" 
     onerror="this.src='fallback.jpg'">

使用loading="lazy"原生属性作为降级方案(现代浏览器支持):

<img src="image.jpg" loading="lazy" alt="Native lazy loading">

注意事项

  • 初始加载时需立即执行一次检测函数
  • 滚动事件建议使用节流(throttle)优化性能
  • 移除已加载图片的事件监听减少计算量
  • 移动端需考虑视口缩放和横屏情况

标签: 加载图片
分享给朋友:

相关文章

vue2实现图片懒加载

vue2实现图片懒加载

实现图片懒加载的方法 在Vue2中实现图片懒加载可以通过以下方法完成,核心原理是监听图片是否进入可视区域,再动态加载图片资源。 使用IntersectionObserver API Interse…

jquery 图片

jquery 图片

jQuery 图片操作 jQuery 提供了多种方法来操作图片,包括加载、显示、隐藏、调整尺寸等。以下是一些常见的图片操作方法: 动态加载图片 使用 attr() 方法可以动态修改图片的 src…

jquery加载

jquery加载

jQuery 加载方法 使用 CDN 加载 jQuery 推荐通过公共 CDN(如 Google、Microsoft 或 jQuery 官方)加载,速度快且可能已被浏览器缓存。 <scr…

uniapp实现懒加载

uniapp实现懒加载

uniapp实现懒加载的方法 在uniapp中实现懒加载可以通过多种方式,以下是几种常见的方法: 使用uni.lazyLoad组件 uniapp提供了内置的懒加载组件,适用于图片等资源的懒加载。在…

H5图片实现地图

H5图片实现地图

实现H5图片地图的方法 在H5中实现图片地图功能,可以通过以下方式完成。图片地图允许用户在图片的特定区域点击,触发不同的交互效果。 使用HTML的<map>和<area>标签…

react如何添加图片

react如何添加图片

在React中添加图片的方法 使用import导入本地图片 将图片文件放在项目目录中(如src/assets),通过import语句引入后作为src属性值: import logo from '.…