利用原生JS实现懒加载lazyLoad的三种方法总结

关于“利用原生JS实现懒加载lazyLoad的三种方法总结”,这是一个非常常见的需求,下面我详细讲解一下相关的攻略:

什么是懒加载

懒加载,也叫延迟加载,它指的是在图片或者其他资源需要显示时才进行加载,相应的,在一开始不需要显示时,可以通过预加载等方式来进行优化,从而提升页面性能,减少请求次数等。

实现懒加载几种常见的方式

1. IntersectionObserver

IntersectionObserver 是一个新的 API,它可以监听元素的可见性变化,从而实现懒加载。使用此方法,我们可以直接监听图片元素是否进入可视区域来判断是否需要加载图片。使用步骤如下:

1.1 HTML 结构

首先需要在需要进行懒加载的图片上使用占位符,例如以下代码:

<img src="loading.gif" data-src="image.jpg" alt="图片">

在这里,我们使用 data-src 属性来存储真正需要加载的图片地址。在 HTML 中,使用 loading.gif 这张图片作为占位符。

1.2 JS 实现

接下来,就可以使用 IntersectionObserver 来监听图片是否进入视口了。代码示例如下:

let observer = new IntersectionObserver(
  (entries) => {
    entries.forEach((entry) => {
      if (entry.intersectionRatio > 0) {
        // 如果元素的交叉比例大于零,表示图片进入了视口,可以加载图片
        entry.target.src = entry.target.dataset.src; // 将 data-src 的值赋值到 src 属性上
        observer.unobserve(entry.target); // 加载完成后,停止监听当前元素
      }
    });
  },
  {
    threshold: 0.01, // 交叉比例
  }
);

// 监听所有需要进行懒加载的图片
document.querySelectorAll('img[data-src]').forEach((img) => {
  observer.observe(img);
});

在这里,首先使用 IntersectionObserver 构造函数创建一个新的实例,然后在构造函数中通过回调函数检查所有进入视口的元素,如果出现了设置,就将 data-src 属性值赋值给 src 属性,从而实现图片的加载。

2. 滚动事件监听

另外一种方式就是通过监听滚动事件来实现懒加载。代码示例如下:

// 获取所有需要进行懒加载的图片
let lazyImgs = document.querySelectorAll('img[data-src]');

// 滚动事件监听函数
let lazyLoad = function () {
  lazyImgs.forEach((img) => {
    // 获取图片距离页面顶部的距离
    let imgTop = img.getBoundingClientRect().top;
    let windowHeight =
      window.innerHeight || document.documentElement.clientHeight;
    // 如果图片进入了视口
    if (imgTop < windowHeight && imgTop > 0) {
      // 将 data-src 的值赋值到 src 属性上
      img.src = img.dataset.src;
      // 加载完成后,删除监听事件
      img.addEventListener('load', () => {
        img.removeAttribute('data-src');
      });
    }
  });
};

// 立即执行一次懒加载函数
lazyLoad();

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

在这里,我们首先需要获取所有需要进行懒加载的图片,然后监听滚动事件,判断图片是否进入视口,如果是,则进行加载操作。关于图片可见区域的计算,可以使用 getBoundingClientRect() 方法获取。

这种方式的缺点是,如果有大量的图片需要进行懒加载,那么随着滚动事件的不断执行,这些函数就会不断地被调用,进而导致页面性能损失。

总结

以上就是实现懒加载的三种方式总结。其中,IntersectionObserver 方式是目前最为推荐的方式。它不仅可以实现懒加载,还可以用于动态调整页面元素的布局等。另外,在使用 IntersectionObserver 方法时,我们还可以设置一个 root 参数,来指定该元素的父容器,从而进一步提升性能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用原生JS实现懒加载lazyLoad的三种方法总结 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • 详解Redis用链表实现消息队列

    下面是详解Redis用链表实现消息队列的完整攻略。 1. 简介 首先,消息队列(message queue)是一种发送和接收消息的机制。消息队列一般应用于解耦、异步处理和削峰填谷等场景。Redis提供的消息队列是使用链表(list)实现的,它提供的API能够满足大部分的队列操作需求。 2. 链表实现的Redis消息队列 Redis使用链表来实现消息队列,链表…

    other 2023年6月27日
    00
  • 史上最牛的WINDOWS系统文件详解第1/3页

    首先,需要明确“史上最牛的WINDOWS系统文件详解第1/3页”指的是什么。这是一篇论文或者文章的标题,猜测是关于对WINDOWS系统文件的详细解析和分析。 文章的攻略可以分为以下几个步骤: 1.阅读文章,理解其主要内容和结构。 2.了解WINDOWS系统文件的基本概念和结构,包括文件类型、存储路径、权限等。 3.分析文章中给出的示例,理解其中的具体细节和原…

    other 2023年6月27日
    00
  • 基于laravelrequest的所有方法详解

    以下是基于Laravel Request的所有方法详解的完整攻略: Laravel Request是一个用于处理HTTP请求的类,它提供了许多有用的方法来获取请求参数、文件、头信息等。以下是一些常用的方法: 获取请求参数 我们可以使用以下方法来获取请求参数: $request->input(‘key’, ‘default’); 该方法返回请求参数中名为…

    other 2023年5月8日
    00
  • oracle中索引的使用索引性能优化调整

    Oracle中索引的使用:索引性能优化调整 在Oracle数据库中,索引是提高查询性能的重要手段。但是,如果索引使用不当,反而会降低查询性能。因此,在使用Oracle索引时,需要考虑如何调整,以充分发挥索引的优势。 什么是索引? 索引是一种数据结构,用于提高数据库的查询效率。在Oracle中,索引是由数据表中的一些列构成的,它们被处理成一种数据结构,以便快速…

    其他 2023年3月29日
    00
  • 苹果mac修改用户名与密码的方法 苹果电脑如何修改开机密码

    修改用户名的方法 步骤一:打开“偏好设置” 点击屏幕左上角的苹果图标,选择“偏好设置”选项进入系统设置菜单。 步骤二:选择“用户与群组” 在偏好设置中选择“用户与群组”选项,进入用户管理菜单。 步骤三:解锁修改 如果你的用户账户已被锁定,则需要在左下角通过管理员账户密码解锁,才能继续操作。 步骤四:点击“编辑”按钮 在用户列表中选择你要修改的账户名称,然后点…

    other 2023年6月27日
    00
  • springboot自定义yml配置文件及其外部部署过程

    首先,我们需要了解什么是YAML配置文件。YAML 是一种可读性高,用来表达数据序列化的格式。YAML 的定位是方便人类阅读的配置文件,对于机器来说,它也很容易解析。因此,SpringBoot 采用了 YAML 作为自己的配置文件格式。 下面是关于如何自定义 SpringBoot 的 YAML 配置文件及外部部署的完整攻略: 1. 在代码中加入自定义的 YA…

    other 2023年6月25日
    00
  • 一个网卡怎么新增一个跨网段ip地址?

    新增一个跨网段的IP地址需要进行以下步骤: 确定网卡名称:首先,需要确定要新增IP地址的网卡名称。可以通过运行ifconfig命令(Linux/Unix)或ipconfig命令(Windows)来查看当前系统中的网卡列表。找到要新增IP地址的网卡名称,例如eth0。 编辑网络配置文件:接下来,需要编辑网络配置文件以添加新的IP地址。在Linux/Unix系统…

    other 2023年7月30日
    00
  • Linux 挂载磁盘详解及实操步骤

    Linux 挂载磁盘详解及实操步骤 简介 在 Linux 系统中,挂载磁盘是常见的操作,本文将详细讲解 Linux 挂载磁盘的概念、原理、注意事项和实操步骤,以及两个示例的说明。 概念 在 Linux 系统中,挂载是指将一个文件系统附加到系统目录树中的一个目录上,从而使该文件系统成为该目录的一部分,由用户可以读取或写入该目录中的文件。 原理 Linux 操作…

    other 2023年6月28日
    00
合作推广
合作推广
分享本页
返回顶部