如何通过IntersectionObserver实现懒加载

 更新时间:2023年04月17日 10:20:42   作者:凌晨 || AmsWait  
这篇文章主要介绍了通过IntersectionObserver实现懒加载,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

通常懒加载等都会通过监听scroll事件用getBoundingClientRect()来判断元素位置来决定是否可以开始加载。性能开销是比较大的,为了节省性能又需要各种操作去弥补,例如用节流来减少判断次数等。
IntersectionObserver API可以完全省去这些操作,只需要简单的读取即可。

点击查看IntersectionObserver 文档

示例

new IntersectionObserver(callBack, options);

    let options = {
        root: null, // 相对的根元素,null为视口
        threshold: 1.0 //重叠率 0.0-1.0(完全重叠即完全进入root元素) 重叠率达到要求后触发事件 
    },
    callBack = (entries, observer) => { // entries 数组,包含所有的被观察者

        entries.forEach(entry => {
            // isIntersecting 即是否重叠
            entry.target.innerText = entry.isIntersecting ? '加载~~~~': '不可见'; 
        })
    },
    observer  = new IntersectionObserver(callBack, options);

    let observedList = document.querySelectorAll('h1');
    observedList.forEach(element => {
        observer.observe(element)
    });

options 配置项

传递到 IntersectionObserver() 构造函数的 options 对象,允许您控制观察者的回调函数的被调用时的环境。它有以下字段:

  • root

指定根(root)元素,用于检查目标的可见性。必须是目标元素的父级元素。如果未指定或者为null,则默认为浏览器视窗。

  • rootMargin

根(root)元素的外边距。类似于 CSS 中的 margin 属性,比如 “10px 20px 30px 40px” (top, right, bottom, left)。如果有指定 root 参数,则 rootMargin 也可以使用百分比来取值。该属性值是用作 root 元素和 target 发生交集时候的计算交集的区域范围,使用该属性可以控制 root 元素每一边的收缩或者扩张。默认值为0。

  • threshold

可以是单一的 number 也可以是 number 数组,target 元素和 root 元素相交程度达到该值的时候 IntersectionObserver 注册的回调函数将会被执行。如果你只是想要探测当 target 元素的在 root 元素中的可见性超过50%的时候,你可以指定该属性值为0.5。如果你想要 target 元素在 root 元素的可见程度每多25%就执行一次回调,那么你可以指定一个数组 [0, 0.25, 0.5, 0.75, 1]。默认值是0 (意味着只要有一个 target 像素出现在 root 元素中,回调函数将会被执行)。该值为1.0含义是当 target 完全出现在 root 元素中时候 回调才会被执行。

Demo

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body {
            font-size: 24px;
        }
    </style>
</head>
<body>
    <h1>不可见</h1>
    <h4>不可见</h4>
    <h1>不可见</h1>
    <h4>不可见</h4>
    <h1>不可见</h1>
    <h4>不可见</h4>
    <h1>不可见</h1>
    <h4>不可见</h4>
    <h1>不可见</h1>
    <h4>不可见</h4>
    <h1>不可见</h1>
    <h4>不可见</h4>
    <h1>不可见</h1>
    <h4>不可见</h4>
    <h1>不可见</h1>
    <h4>不可见</h4>
    <h1>不可见</h1>
    <h4>不可见</h4>
    <h1>不可见</h1>
    <h4>不可见</h4>
    <h1>不可见</h1>
    <h4>不可见</h4>
    <h1>不可见</h1>
    <h4>不可见</h4>
    <h1>不可见</h1>
    <h4>不可见</h4>
    <h1>不可见</h1>
    <h4>不可见</h4>
    <h1>不可见</h1>
    <h4>不可见</h4>

    <script>
        let options = {
            root: null, // 根元素,null为视口
            threshold: 1.0 //重叠率 0.0-1.0  重叠率达到要求后触发事件 
        },
        callBack = (entries, observer) => {
            entries.forEach(entry => {
                entry.target.innerText = entry.isIntersecting ? '测试': '不可见';
            })
        },
        observer  = new IntersectionObserver(callBack, options);

        let observedList = document.querySelectorAll('h1');
        observedList.forEach(element => {
            observer.observe(element)
        });
    </script>
</body>
</html>

到此这篇关于通过IntersectionObserver实现懒加载的文章就介绍到这了,更多相关IntersectionObserver懒加载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript实现简单的二级导航菜单实例

    JavaScript实现简单的二级导航菜单实例

    这篇文章主要介绍了JavaScript实现简单的二级导航菜单,设计javascript动态操作页面元素的技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • 解决超出JS的安全整数的限制范围问题

    解决超出JS的安全整数的限制范围问题

    这篇文章主要介绍了解决超出JS的安全整数的限制范围问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 一行JavaScript代码如何实现瀑布流布局

    一行JavaScript代码如何实现瀑布流布局

    这篇文章主要给大家介绍了如何通过一行JavaScript代码实现瀑布流布局的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 微信小程序在web-view页面增加一个按钮具体代码

    微信小程序在web-view页面增加一个按钮具体代码

    web-view是一个可以用来承载网页的容器,会自动铺满整个小程序页面,这篇文章主要给大家介绍了关于微信小程序在web-view页面增加一个按钮的具体代码,需要的朋友可以参考下
    2023-10-10
  • js如何比较两个日期的时间大小简单代码示例

    js如何比较两个日期的时间大小简单代码示例

    在JavaScript中,日期比较涉及评估两个日期,以确定一个日期是早于、晚于另一个日期还是与另一个日期相同,这篇文章主要给大家介绍了关于js如何比较两个日期的时间大小的相关资料,需要的朋友可以参考下
    2024-06-06
  • JS 数组和对象的深拷贝操作示例

    JS 数组和对象的深拷贝操作示例

    这篇文章主要介绍了JS 数组和对象的深拷贝操作,结合实例形式分析了JS 数组和对象的深拷贝基本原理与操作技巧,需要的朋友可以参考下
    2020-06-06
  • JavaScript中的style.display属性操作

    JavaScript中的style.display属性操作

    今天为大家介绍的是JavaScript中的style.display属性操作实现代码与参数介绍
    2013-03-03
  • 基于JavaScript实现跳转提示页面

    基于JavaScript实现跳转提示页面

    这篇文章主要介绍了基于JavaScript实现跳转提示页面 的相关资料,需要的朋友可以参考下
    2016-09-09
  • JavaScript中return返回多个值的三个方法实现

    JavaScript中return返回多个值的三个方法实现

    本文主要介绍了JavaScript中return返回多个值的三个方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 中高级前端必须了解的JS中的内存管理(推荐)

    中高级前端必须了解的JS中的内存管理(推荐)

    这篇文章主要介绍了中高级前端必须了解的JS中的内存管理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07

最新评论