当前位置:首页 > JavaScript

js实现图片的懒加载

2026-04-04 00:00:42JavaScript

实现原理

图片懒加载的核心原理是延迟加载非视口内的图片,当用户滚动页面时,动态将占位符替换为真实图片。通过监听滚动事件或使用Intersection Observer API判断图片是否进入可视区域。

传统滚动监听方式

// 获取所有需要懒加载的图片元素
const lazyImages = document.querySelectorAll('img[data-src]');

// 滚动事件处理函数
function lazyLoad() {
  lazyImages.forEach(img => {
    if (img.getAttribute('data-loaded')) return;

    const rect = img.getBoundingClientRect();
    if (rect.top < window.innerHeight && rect.bottom > 0) {
      img.src = img.getAttribute('data-src');
      img.removeAttribute('data-src');
      img.setAttribute('data-loaded', 'true');
    }
  });
}

// 初始加载可视区域图片
lazyLoad();

// 添加滚动事件监听
window.addEventListener('scroll', lazyLoad);
window.addEventListener('resize', lazyLoad);

Intersection Observer API(推荐)

const lazyImages = document.querySelectorAll('img[data-src]');

const observer = new IntersectionObserver((entries, observer) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      const img = entry.target;
      img.src = img.getAttribute('data-src');
      img.removeAttribute('data-src');
      observer.unobserve(img);
    }
  });
});

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

HTML结构示例

<img data-src="path/to/real-image.jpg" src="path/to/placeholder.jpg" alt="description">

性能优化建议

添加防抖函数减少scroll事件触发频率

function debounce(fn, delay) {
  let timer;
  return function() {
    clearTimeout(timer);
    timer = setTimeout(fn, delay);
  };
}

window.addEventListener('scroll', debounce(lazyLoad, 200));

为未加载图片添加加载动画或占位背景

img[data-src] {
  background: #f0f0f0;
  min-height: 200px;
}

兼容性处理

对于不支持Intersection Observer的浏览器,可回退到传统方法

js实现图片的懒加载

if ('IntersectionObserver' in window) {
  // 使用Observer API
} else {
  // 使用传统滚动监听
}

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

相关文章

vue实现图片查看

vue实现图片查看

Vue 实现图片查看功能 在 Vue 中实现图片查看功能,可以通过原生实现或使用第三方库。以下是几种常见的方法: 原生实现方式 使用 Vue 的指令和事件绑定实现基础的图片查看功能。 <te…

加载jquery

加载jquery

加载 jQuery 的方法 通过 CDN 加载 推荐使用官方或公共 CDN(内容分发网络)加载 jQuery,速度快且稳定。将以下代码添加到 HTML 文件的 <head> 或 <b…

vue实现图片查看

vue实现图片查看

实现图片查看功能 在Vue中实现图片查看功能可以通过多种方式完成,常见的有使用原生HTML5的<dialog>元素、第三方组件库(如Element UI、Vant等)或专用插件(如view…

react如何引入图片

react如何引入图片

在React中引入图片的方法 使用import直接引入 将图片文件放在项目src目录下(如src/images),通过ES6的import语法引入: import logo from './imag…

vue实现图片列表

vue实现图片列表

实现图片列表的基本方法 在Vue中实现图片列表可以通过v-for指令遍历图片数据数组,结合<img>标签动态绑定src属性。以下是基本实现步骤: <template> &…

vue实现无限加载

vue实现无限加载

Vue 实现无限加载的方法 无限加载(Infinite Scroll)是一种常见的用户体验优化方式,适用于数据量较大的列表或瀑布流场景。以下是几种在 Vue 中实现无限加载的常用方法。 监听滚动事件…