首页 > 其他分享 >Intersection Observer

Intersection Observer

时间:2023-06-12 09:35:28浏览次数:33  
标签:Observer 元素 参数 Intersection 监听 加载

Intersection Observer

在日常开发中,经常会遇到对数据、图片进行懒加载的处理,要判断用户是否已经看到了数据或者图片。之前用的方法是通过听到scroll事件或者使用setInterval来判断,这种方法的缺点是,由于scroll事件触发频率高,计算量很大,如果不做防抖节流的话,很容易造成性能问题,而setInterval由于其有间歇期,也会出现体验问题。后来推出了一个新的api——IntersectionObserver。

Intersection Observer 翻译过来即交叉观察器,主要是用于监听目标元素与指定的元素视窗是否发生交叉,一句话总结:Intersection Observer API 提供了一种异步检测目标元素与祖先元素或 viewport 相交情况变化的方法。Intersection Observer是浏览器提供的构造函数,接受两个参数,callback:可见性发现变化时的回调函数,option:配置对象(可选)。该函数的返回值是一个观察器实例,上面有4个方法:

observe:开始监听特定元素,接收一个target参数,值是Element类型,用来指定被监听的目标元素。如果需要观察多个节点,则需要多次调用。

unobserve:停止监听特定元素,接收一个target参数,值是Element类型,用来指定停止监听的目标元素

disconnect:关闭监听工作,不接收参数,用来关闭监听器

takeRecords:返回所有观察目标的对象数组,不接受参数,返回所有被观察的对象,返回值是一个数组

还有callback 参数,目标元素的可见性变化时,就会调用观察器的回调函数callback。

callback一般会触发两次。一次是目标元素刚刚进入视口,另一次是完全离开视口。

const io = new IntersectionObserver((changes, observer) => {})

callback函数的参数接收两个参数changes和observer:

changes:这是一个数组,每个成员都是一个被观察对象。举例来说,如果同时有两个被观察的对象的可见性发生变化,那么changes数组里面就会打印出两个元素,如果只观察一个元素,我们打印changes[0]就能获取到被观察对象

observer: 这是一个对象,返回我们在实例中传入的第二个参数option(如果没传,则返回默认值)

IntersectionObserver API 可以应用在预加载(滚动加载,翻页加载,无限加载)、懒加载(后加载、惰性加载)

还需要注意的是IntersectionObserver API是异步的,不随着目标元素的滚动同步触发。还有它优先级很低,只有等线程空下来才会执行它。

标签:Observer,元素,参数,Intersection,监听,加载
From: https://www.cnblogs.com/DTCLOUD/p/17474081.html

相关文章

  • 判断两个矩形是否相交(Rect Intersection)
    0x00Preface最近在开发一个2D组态图形组件的过程中,里面的数学模块,涉及到两个矩形是否相交的判断。这个问题很多年前就写过,算是个小的算法吧。网络上搜索一下,有很多思路,有一些思路要基于多种组合的判断,显得比较复杂。比如两个矩形相交的情形,可能有下面的多种类型:而每种类型......
  • 拓扑错误:自交。jts.geom.TopologyException: found non-noded intersection between L
    Thatbeingsaid,youwillwanttoensurethegeometriesarevalidbeforecomputingtheintersection,using polygon1.isValid() and polygon2.isValid().Thesampledatafor polygon2 isself-intersecting,sotheintersectionoperationfailswithcom.vividso......
  • Intersection Observer API 交叉观察器 API vue3 antd table 滚动加载 使用过程
    需求:表格滚动加载做法:步骤一:给表格最后一行添加特定标识,类名或者id等组件库https://www.antdv.com/components/table-cn#APIwebApihttps://developer.mozilla.org/zh-CN/docs/Web/API/Intersection_Observer_API组件名table添加类名的组件方法rowClassName使用例子::......
  • leetcode 350. Intersection of Two Arrays II
    Giventwoarrays,writeafunctiontocomputetheirintersection.Example:Givennums1=[1,2,2,1],nums2=[2,2],return[2,2].Note:Eachelementintheresultshouldappearasmanytimesasitshowsinbotharrays.Theresultcanbeinanyorder.Foll......
  • 设计模式-观察者模式(Observer)
    一、 观察者(Observer)模式观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通......
  • 观察者模式(Observer Pattern)
    一、模式动机观察者模式用于描述对象之间的依赖关系,它引入了观察者和观察目标两类不同的角色,由于提供了抽象层,它使得增加新的观察者和观察目标都很方便。观察者模式广泛应用于各种编程语言的事件处理模型中,Java语言也提供了对观察者模式的全面支持。一个对象的状态或行为的变......
  • cpp: Observer Pattern II
     //SupperGold.h:此文件包含"SupperGold"类。ObserverPattern观察者模式C++14//JewelryObserverPattern观察者模式//2023年5月10日涂聚文GeovinDuVisualStudio2022edit.#pragmaonce#ifndefSUPPERGOLD_H#defineSUPPERGOLD_H#include<io......
  • Intersection Observer API 实现图片懒加载
    1,为需要延迟加载的图片设置data-src属性。<imgsrc=""data-src="image.jpg"alt="图片">2,使用IntersectionObserverAPI监听可视区域内的元素变化,并将其data-src属性值赋给src属性,显示图片。constlazyLoadImg=newIntersectionObserver((entries,observer)=>{en......
  • Hbase 协处理器 RegionObserver
     RegionObserver注:每次更新协处理器方法,最好加上版本更新,否则可能会出现更新失败协处理器安装-表级别安装disable'wechat_article'alter'wechat_article',METHOD=>'table_att','coprocessor'=>'hdfs://test111:8020/coprocessor/hbase-coprocessor-0.0.6-S......
  • UVA How Many Points of Intersection?
      HowManyPointsofIntersection? a dotsonthetoprowand b dotsonthebottomrow.Wedrawlinesegmentsconnectingeverydotonthetoprowwitheverydotonthebottomrow.Thedotsarearrangedinsuchawaythatthenumberofinternalintersectio......