返回顶部
首页 > 资讯 > 前端开发 > node.js >IntersectionObserver懒加载怎么用
  • 851
分享到

IntersectionObserver懒加载怎么用

2024-04-02 19:04:59 851人浏览 安东尼
摘要

这篇文章给大家分享的是有关IntersectionObserver懒加载怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。概念IntersectionObserver接口(从属

这篇文章给大家分享的是有关IntersectionObserver懒加载怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

概念

IntersectionObserver接口(从属于Intersection Observer api)为开发者提供了一种可以异步监听目标元素与其祖先或视窗(viewport)交叉状态的手段。祖先元素与视窗(viewport)被称为根(root)。

这是MDN上给的官方概念,不用去管它,我粘出来只是为了显得专业点嘛...

重点看这里 监听目标元素与其祖先或视窗交叉状态的手段 ,其实就是观察一个元素是否在视窗可见。

IntersectionObserver懒加载怎么用

可以看到,交叉了就是说明当前元素在视窗里,当前就是可见的了。

API

var io = new IntersectionObserver(callback, options)

其实就是一个简单的构造函数。

以上代码会返回一个 IntersectionObserver 实例, callback 是当元素的可见性变化时候的回调函数, options 是一些配置项(可选)。

我们使用返回的这个实例来进行一些操作。

io.observe(document.querySelector('img')) 开始观察,接受一个DOM节点对象
io.unobserve(element) 停止观察 接受一个element元素
io.disconnect() 关闭观察器

options

root

用于观察的根元素,默认是浏览器的视口,也可以指定具体元素,指定元素的时候用于观察的元素必须是指定元素的子元素

threshold

用来指定交叉比例,决定什么时候触发回调函数,是一个数组,默认是 [0]

const options = {
	root: null,
	threshold: [0, 0.5, 1]
}
var io = new IntersectionObserver(callback, options)
io.observe(document.querySelector('img'))

上面代码,我们指定了交叉比例为0,0.5,1,当观察元素img0%、50%、100%时候就会触发回调函数

rootMargin

用来扩大或者缩小视窗的的大小,使用CSS的定义方法, 10px 10px 30px 20px 表示top、right、bottom 和 left的值

const options = {
	root: document.querySelector('.box'),
	threshold: [0, 0.5, 1],
	rootMargin: '30px 100px 20px'
}

为了方便理解,我画了张图,如下

IntersectionObserver懒加载怎么用

首先我们来看下图上的问题,蓝线是什么呢?他就是咱们定义的root元素,我们添加了 rootMargin 属性,将视窗的增大了,虚线就是现在的视窗,所以元素现在也就在视窗里面了。

由此可见,root元素只有在 rootMargin 为空的时候才是绝对的视窗。

说了简单的options,接下来我们看下 callback

callback

上面我们说到,当元素的可见性变化时,就会触发callback函数。

callback函数会触发两次,元素进入视窗(开始可见时)和元素离开视窗(开始不可见时)都会触发

var io = new IntersectionObserver((entries)=>{
	console.log(entries)
})

io.observe($0)

以上代码,请在chrome控制台进行调试,这里我使用了 $0 选择了上一次我审查元素的选择的节点

运行结果如下

IntersectionObserver懒加载怎么用

我们可以看到callback函数有个 entries 参数,它是个 IntersectionObserverEntry 对象数组,接下来我们重点说下IntersectionObserverEntry对象

IntersectionObserverEntry

IntersectionObserverEntry 提供观察元素的信息,有七个属性。

boundinGClientRect 目标元素的矩形信息 intersectionRatio 相交区域和目标元素的比例值 intersectionRect/boundingClientRect 不可见时小于等于0 intersectionRect 目标元素和视窗(根)相交的矩形信息 可以称为相交区域 isIntersecting 目标元素当前是否可见 Boolean值 可见为true rootBounds 根元素的矩形信息,没有指定根元素就是当前视窗的矩形信息 target 观察的目标元素 time 返回一个记录从 IntersectionObserver 的时间到交叉被触发的时间的时间戳

上面几个矩形信息的关系如下

IntersectionObserver懒加载怎么用

划重点

intersectionRatio和 isIntersecting 是用来判断元素是否可见的,押题咯...

懒加载

好了,通过上面一些概念我们大概了解了 IntersectionObserver 是个什么东西,接下来我们用它来写点代码,写什么呢?没错就是懒加载。

通过IntersectionObserver来实现懒加载,就简单的多了,我们只需要设置回调,判断当前元素是否可见,再进行渲染操作就行了,而不用去关心内部的计算。

主要代码如下

const io = new IntersectionObserver(()=>{ // 实例化 默认基于当前视窗
	
}) 

let ings = document.querySelectorAll('[data-src]') // 将图片的真实url设置为data-src src属性为占位图 元素可见时候替换src

function callback(entries){ 
	entries.forEach((item) => { // 遍历entries数组
		if(item.isIntersecting){ // 当前元素可见
			item.target.src = item.target.dataset.src // 替换src
			io.unobserve(item.target) // 停止观察当前元素 避免不可见时候再次调用callback函数
		}	
	})
}

imgs.forEach((item)=>{ // io.observe接受一个DOM元素,添加多个监听 使用forEach
	io.observe(item)
})

本想录制个GIF图,使用Recordlt始终上传不了,谁有好用的GIF图录制软件请推荐个,不胜感激。。

呐,给你花:rose:

因篇幅有限,完整代码请戳 GitHub

注意

目前IntersectionObserver是一个实验中的功能,请酌情使用。

IntersectionObserver懒加载怎么用

感谢各位的阅读!关于“IntersectionObserver懒加载怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: IntersectionObserver懒加载怎么用

本文链接: https://lsjlt.com/news/78172.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • IntersectionObserver懒加载怎么用
    这篇文章给大家分享的是有关IntersectionObserver懒加载怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。概念IntersectionObserver接口(从属...
    99+
    2024-04-02
  • vue3图片懒加载IntersectionObserver和useIntersectionObserver怎么用
    这篇文章主要介绍“vue3图片懒加载IntersectionObserver和useIntersectionObserver怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue3图片懒加载In...
    99+
    2023-07-05
  • 如何通过IntersectionObserver实现懒加载
    通常懒加载等都会通过监听scroll事件用getBoundingClientRect()来判断元素位置来决定是否可以开始加载。性能开销是比较大的,为了节省性能又需要各种操作去弥补,例...
    99+
    2023-05-16
    IntersectionObserver懒加载
  • vue3图片懒加载IntersectionObserver和useIntersectionObserver如何用
    这篇文章主要讲解了“vue3图片懒加载IntersectionObserver和useIntersectionObserver如何用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue3图片...
    99+
    2023-07-06
  • react懒加载怎么使用
    这篇文章主要介绍“react懒加载怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“react懒加载怎么使用”文章能帮助大家解决问题。react懒加载是指不会预加载,而是需要使用某段代码,某个组...
    99+
    2023-07-04
  • React+TS+IntersectionObserver实现视频懒加载和自动播放功能
    目录IntersectionObserver视频播放控制组件结语为了提高用户体验,网站通常会使用视频来呈现内容。然而,在网站中使用自动播放的视频通常会导致页面加载时间变长,因为用户需...
    99+
    2023-05-18
    React懒加载 React视频自动播放
  • vue3 图片懒加载的两种方式、IntersectionObserver和useIntersectionObserver实例详解
    目录1、在src下创建helloworld.js 内容如下2、在main.js中导入并使用3、再app.vue中使用如下:1、在src下创建helloworld.js 内容如下 //...
    99+
    2023-03-19
    vue3 图片懒加载 vue3 IntersectionObserver和useIntersectionObserver vue图片懒加载
  • EntityFrameworkCore延迟加载(懒加载)用法
    众所周知在EF 6 及以前的版本中,是支持懒加载(Lazy Loading)的,可惜在EF Core 并不支持,必须使用Include方法来支持导航属性的数据加载。不过现在EF Co...
    99+
    2024-04-02
  • jQuery中图片懒加载lazyload.js怎么用
    这篇文章将为大家详细讲解有关jQuery中图片懒加载lazyload.js怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。lazyload是一个用Javascript...
    99+
    2024-04-02
  • jquery的懒加载怎么实现
    今天小编给大家分享一下jquery的懒加载怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一...
    99+
    2024-04-02
  • MyBatis中怎么实现懒加载
    在MyBatis中,可以通过配置来实现懒加载。在映射文件中使用lazyLoadingEnabled来配置是否启用懒加载,以及使用se...
    99+
    2024-04-08
    MyBatis
  • (11)Hibernate懒加载
    1、get、load方法区别?get: 及时加载,只要调用get方法立刻向数据库查询load:默认使用懒加载,当用到数据的时候才向数据库查询。2、懒加载(lazy)2.1、概念概念:当用到数据的时候才向数据...
    99+
    2024-04-02
  • redis懒加载是什么
    redis懒加载指的是延迟加载,当访问页面时,会把img标签中的src链接设为同一张图片,将其真正的图片地址存储在img标签的自定义属性中,当js监听到该图片元素进入可视窗口时,即将地址存储到src属性中,从而达到懒加载的效果。...
    99+
    2024-04-02
  • 什么是react懒加载
    本教程操作环境:Windows10系统、react18.0.0版、Dell G3电脑。什么是react懒加载?React懒加载一、懒加载是什么?为什么需要懒加载?懒加载:不会预加载,而是需要使用某段代码,某个组件或者某张图片时,才加载他们(...
    99+
    2023-05-14
    懒加载 React
  • JS图片懒加载库VueLazyLoad怎么使用
    这篇文章主要介绍“JS图片懒加载库VueLazyLoad怎么使用”,在日常操作中,相信很多人在JS图片懒加载库VueLazyLoad怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JS图片懒加载库Vue...
    99+
    2023-07-05
  • Vue怎么实现图片懒加载
    本篇内容主要讲解“Vue怎么实现图片懒加载”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue怎么实现图片懒加载”吧! 1.下载 npm i vue-laz...
    99+
    2024-04-02
  • vue怎么实现路由懒加载
    这篇文章主要介绍了vue怎么实现路由懒加载,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。路由懒加载写法: // 我所采用...
    99+
    2024-04-02
  • JavaScript怎么实现图片懒加载
    本篇内容介绍了“JavaScript怎么实现图片懒加载”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!实现思路实现图片懒加载我们需要先明白具体...
    99+
    2023-07-02
  • 怎么在Java中实现懒加载
    这篇文章主要介绍“怎么在Java中实现懒加载”,在日常操作中,相信很多人在怎么在Java中实现懒加载问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么在Java中实现懒加载”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-07-05
  • uni-app image懒加载
     1、uni-app官方给的文档注意看 lazy-loadBooleanfalse图片懒加载。只针对page与scroll-view下的image有效微信小程序、百度小程序、字节跳动小程序、飞书小程序 只针对page与scroll-vie...
    99+
    2023-10-20
    uni-app 微信小程序 小程序
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作