当前位置:首页 > JavaScript

js如何实现懒加载

2026-01-30 16:17:00JavaScript

实现懒加载的方法

使用Intersection Observer API

Intersection Observer API是现代浏览器提供的高效方法,用于监听元素是否进入视口。

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中需要将真实URL放在data-src属性:

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

传统滚动事件监听

对于不支持Intersection Observer的旧浏览器,可以使用滚动事件实现。

function lazyLoad() {
  const lazyImages = [].slice.call(document.querySelectorAll('img.lazy'));

  if (lazyImages.length === 0) {
    window.removeEventListener('scroll', lazyLoad);
    return;
  }

  lazyImages.forEach(img => {
    if (img.getBoundingClientRect().top <= window.innerHeight + 100) {
      img.src = img.dataset.src;
      img.classList.remove('lazy');
    }
  });
}

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

动态加载组件

对于Vue等现代框架,可以使用动态导入实现组件懒加载。

const LazyComponent = () => import('./LazyComponent.vue');

在React中可以使用React.lazy:

const LazyComponent = React.lazy(() => import('./LazyComponent'));

图片预加载优化

为了提升用户体验,可以添加加载状态和错误处理。

const img = new Image();
img.src = 'image-to-preload.jpg';
img.onload = () => {
  // 图片加载完成后的处理
};
img.onerror = () => {
  // 加载失败的处理
};

注意事项

  • 合理设置阈值,避免过早或过晚加载
  • 对于重要内容避免懒加载,以免影响SEO
  • 移动端需要考虑网络状况,可以适当提前加载
  • 使用loading="lazy"作为渐进增强方案:
    <img src="image.jpg" loading="lazy" alt="...">

js如何实现懒加载

分享给朋友:

相关文章

vue前端折线如何实现

vue前端折线如何实现

使用 Vue 实现折线图的方法 安装图表库 推荐使用 ECharts 或 Chart.js 等主流图表库。以 ECharts 为例,通过 npm 安装: npm install echarts vu…

vue底层如何实现

vue底层如何实现

Vue 底层的核心实现机制 Vue 的底层实现主要围绕响应式系统、虚拟 DOM 和组件化架构展开。以下是关键技术的详细解析: 响应式系统 依赖追踪与发布订阅模式 通过 Object.define…

vue自动登录如何实现

vue自动登录如何实现

实现自动登录的基本思路 自动登录通常通过结合本地存储(如localStorage或cookie)和token验证机制实现。用户首次登录成功后,服务器返回的认证token会被保存在客户端,下次打开应用时…

vue如何实现

vue如何实现

Vue 实现方法 Vue 提供了多种方式来实现功能,具体取决于需求。以下是一些常见场景的实现方法: 数据绑定 使用 v-model 指令实现双向数据绑定,适用于表单输入元素。在组件中可以通过 pro…

vue加载动画实现

vue加载动画实现

Vue 加载动画实现方法 使用 CSS 动画或过渡 在 Vue 组件中可以直接通过 CSS 实现加载动画效果。定义一个简单的旋转动画: .loading-spinner { width: 40p…

vue如何实现排序

vue如何实现排序

实现数组排序 在Vue中可以通过计算属性或方法对数组进行排序。使用JavaScript的sort()方法结合Vue的响应式特性实现动态排序。 data() { return { item…