常见图片懒加载方式有哪些

  1. 原生JavaScript实现懒加载

    • 原理:利用浏览器的可视区域(getBoundingClientRect函数可以获取元素相对于视窗的位置)来判断图片是否进入可视区域。当图片进入可视区域时,将图片的src属性设置为真实的图片地址,从而实现懒加载。
    • 实现步骤
      • 首先,将图片的src属性设置为一个占位符(通常是一个小尺寸的默认图片或者一个简单的加载提示图标),同时将真实的图片地址存储在data - src(自定义属性)中。例如:
      <img src="placeholder.jpg" data - src="real - picture.jpg" alt="Picture">
      
      • 然后,在JavaScript中获取所有需要懒加载的图片元素,并添加滚动事件监听器。当滚动事件发生时,遍历所有图片,判断它们是否进入可视区域。例如:
      const lazyImages = document.querySelectorAll('img[data - src]');
      const lazyLoad = function () {
        lazyImages.forEach((img) => {
          if (img.getBoundingClientRect().top <= window.innerHeight && img.getBoundingClientRect().bottom >= 0) {
            img.src = img.dataset.src;
            img.removeAttribute('data - src');
          }
        });
      };
      window.addEventListener('scroll', lazyLoad);
      window.addEventListener('load', lazyLoad);
      
    • 优点:不需要引入外部库,纯原生JavaScript实现,对代码量较小的项目比较友好,易于理解和定制。
    • 缺点:需要手动处理滚动等事件,代码逻辑相对复杂一些;在性能上可能不如一些经过优化的第三方库;如果页面中有大量图片,可能会对性能产生一定影响。
  2. 使用Intersection Observer API实现懒加载

    • 原理:Intersection Observer API是浏览器提供的一种异步观察目标元素与祖先元素或视窗(viewport)交叉状态的方法。通过这个API,可以轻松地观察图片元素是否进入可视区域,当交叉比例达到一定阈值时,触发回调函数进行懒加载。
    • 实现步骤
      • 同样,先将图片的src属性设置为占位符,真实图片地址放在data - src属性中。例如:
      <img src="placeholder.jpg" data - src="real - picture.jpg" alt="Picture">
      
      • 然后,在JavaScript中使用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;
            img.removeAttribute('data - src');
            observer.unobserve(img);
          }
        });
      });
      lazyImages.forEach((img) => {
        observer.observe(img);
      });
      
    • 优点:性能较好,因为它是浏览器原生支持的异步API,不需要频繁地检查元素是否进入可视区域,减少了浏览器的开销;代码相对简洁,使用方便。
    • 缺点:兼容性方面,一些旧版本的浏览器可能不支持Intersection Observer API,需要考虑兼容性处理,如使用@babel/polyfill或者提供备用的懒加载方案。
  3. 利用第三方库实现懒加载(以LazyLoad.js为例)

    • 原理:第三方懒加载库通常封装了复杂的判断和加载逻辑,提供简单易用的接口。以LazyLoad.js为例,它会自动检测页面中的图片元素,根据其配置的参数(如可视区域的阈值、加载动画等)来实现懒加载。
    • 实现步骤
      • 首先,引入LazyLoad.js库。可以通过下载库文件并在HTML中引入,或者使用CDN链接引入。例如:
      <script src="https://cdn.jsdelivr.net/npm/vanilla - lazyload@17.3.1/dist/lazyload.min.js"></script>
      
      • 然后,在JavaScript中初始化懒加载。例如:
      const lazyLoadInstance = new LazyLoad();
      
      • 可以通过配置参数来定制懒加载的行为。例如,设置可视区域的阈值为50%,即当图片50%进入可视区域时开始加载:
      const lazyLoadInstance = new LazyLoad({
        threshold: 0.5
      });
      
    • 优点:功能强大,通常具有较好的兼容性处理,提供多种配置选项,如加载动画、延迟加载时间等,可以快速实现懒加载功能并且有较好的用户体验。
    • 缺点:需要引入外部库,增加了项目的依赖;如果库的体积较大,可能会增加页面的加载时间。
posted @   jialiangzai  阅读(73)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

喜欢请打赏

扫描二维码打赏

微信打赏

点击右上角即可分享
微信分享提示