对目标元素进行监听 - addListener和IntersectionObserver
在web的构建中,经常需要对元素进行监听,例如监听元素是否出现在可视范围内。
我们可以通过addEventListener来监听滚动,计算元素距离顶部的位置对元素的变更来做出反应。
但是长时间大量的触发事件反而对网页性能影响很大,使用节流的话其实也只是浅浅的优化一下性能。有没有其他思路可以既当元素改变超过阈值的时候触发我们的状态又可以降低性能要求呢。
Intersection Observer API - Web API 接口参考 | MDN (mozilla.org)
Intersection Observer
通过Intersection Observer API来实现我们的要求。观察者。
Intersection Observer API提供了一种一部检测目标元素与祖先元素相交情况。当发生相交的时候就可以触发我们的事件监听,而不是长时间保持监听状态,在js中被称为观察者模式。
利用这个我们可以轻松构建图片懒加载、内容无限滚动、视频自动播放等常见的需求上。
用法
-
创建一个IntersectionObserver对象
const observer = new IntersectionObserver(callback); //callback为触发事件
-
Observer.observe目标对象
observer.observe(dom); // observer可以同时监听多个元素, 触发gfn
-
可以设置具体参数
let options = { root: document.querySelector('#scrollArea'), rootMargin: '0px', threshold: 1.0,// 阈值为 1.0 意味目标元素完全出现在 root 选项指定的元素中可见时 } const observer = new IntersectionObserver(callback, options); // options设置observer
在回调函数中传参可以通过target属性来获取目标. 当然如果监听多个对象, 则需要遍历再获取target
const callbak = (entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
console.log("我出现了");
}
}
}
entry.isIntersecting为状态值, 译为是否出现在root中, 且满足options条件.
本文作者:WaterRec
本文链接:https://www.cnblogs.com/waterrec/p/17544642.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?