当前位置:首页 > JavaScript

js实现懒加载图片

2026-01-30 16:12:04JavaScript

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

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

Intersection Observer API 实现

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

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">

传统滚动事件实现

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

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"原生属性作为降级方案(现代浏览器支持):

js实现懒加载图片

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

注意事项

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

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

相关文章

vue懒加载实现难吗

vue懒加载实现难吗

Vue懒加载的实现难度 Vue懒加载的实现并不复杂,尤其是借助现代工具和库的支持。懒加载的核心思想是按需加载资源,通常用于路由或组件,以提升页面初始加载速度。以下是常见的实现方法和注意事项: 路由懒…

H5图片实现地图

H5图片实现地图

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

vue实现图片插件

vue实现图片插件

Vue 图片插件实现方案 在 Vue 中实现图片插件通常涉及图片展示、懒加载、预览等功能。以下是几种常见的实现方式: 基础图片组件封装 创建一个可复用的图片组件,支持默认图片、加载失败处理等基础功能…

vue实现html图片

vue实现html图片

在 Vue 中实现 HTML 图片渲染 在 Vue 中渲染 HTML 图片可以通过多种方式实现,以下是几种常见的方法: 使用 v-html 指令渲染包含图片标签的 HTML 字符串 <tem…

vue 实现图片粘贴

vue 实现图片粘贴

实现图片粘贴功能 在Vue中实现图片粘贴功能,可以通过监听粘贴事件并处理剪贴板中的图片数据。以下是具体实现方法: 监听粘贴事件 在Vue组件中,为需要粘贴图片的元素添加paste事件监听器。可以使用…

vue实现发送图片

vue实现发送图片

使用 Vue 实现发送图片功能 前端实现(Vue 部分) 模板部分 <template> <div> <input type="file" accept="…