当前位置:首页 > 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)优化性能
  • 移除已加载图片的事件监听减少计算量
  • 移动端需考虑视口缩放和横屏情况

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

相关文章

css图片按钮制作

css图片按钮制作

使用纯CSS创建图片按钮 通过CSS的background-image属性可以轻松将图片设置为按钮背景。关键点在于设置合适的尺寸、去除默认边框并添加交互状态: .image-btn { widt…

h5实现全景图片

h5实现全景图片

H5 实现全景图片的方法 使用 Three.js 库 Three.js 是一个强大的 3D 库,可以用于创建全景图片效果。以下是一个简单的实现步骤: 引入 Three.js 库 <scri…

vue 实现图片

vue 实现图片

Vue 实现图片加载与展示的方法 在 Vue 中实现图片加载和展示可以通过多种方式完成,包括静态资源引用、动态绑定、懒加载等。以下是几种常见的方法: 静态资源引用 将图片放在项目的 public 或…

H5图片实现地图

H5图片实现地图

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

js 实现图片 放大

js 实现图片 放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性可以实现图片的平滑放大效果。结合 JavaScript 监听鼠标事件控制放大状态: con…

js实现图片拖动

js实现图片拖动

实现图片拖动的步骤 使用JavaScript实现图片拖动功能,可以通过HTML5的拖放API结合事件监听实现。以下是具体方法: 设置HTML结构 为图片添加draggable属性,并设置唯一ID以便…