一文详解 Taro / 小程序 IntersectionObserver 参数

只要理解"两个矩形的重叠区域 "这件事,IntersectionObserver 完全不难

IntersectionObserver 的本质是观察 两个区域是否相交,当相交区域产生或变化时,就会触发回调

relativeTo(string selector, Object margins) 参数解析

官方解释:developers.weixin.qq.com/miniprogram...

参数中的 margins 解释不是很详细,个人理解图示如下:

调用方式示例:

css 复制代码
observer.relativeToViewport({
  top: -50,
  bottom: 100,
});

正值为向外扩张边界,负值为向内收缩边界。

observe(string targetSelector, function callback) 中的回调函数参数解析

官方解释:developers.weixin.qq.com/miniprogram...

function callback 中的 intersectionRectboundingClientRectrelativeRect 参数解释:

区域 说明
目标区域 boundingClientRect 你要观察的元素的位置与大小
参照区域 relativeRect 通常是视口(屏幕可见部分),也可以是自定义容器
相交区域 intersectionRect 目标区域与参照区域的重叠部分

每个 rect 中的top/bottom/left/right 参数解释:

首先理解这代表一个坐标,坐标系知识(理解 top/bottom 很关键),以屏幕左上角为原点,x 向右递增,y 向下递增

个人理解如图所示:

易混淆重点:margins 的 top ≠ 回调里的 top

名称 出现位置 表示的含义 简单理解
margins 中的 top/bottom/left/right .relativeToViewport({ ... }) 参照区域边界的扩张或缩小 扩大/缩小观察范围
回调中的 top/bottom/left/right observe(..., callback(res)) 某个矩形相对屏幕的坐标位置 当前元素在哪里

在可视化区域中(也就是第一象限正象限)

bottom = top + height

right = left + width

示例解析:

返回值 含义
top: -20 元素顶部在屏幕上边缘 上方 20px(不可见部分)
bottom: -20 元素底部在屏幕下边缘 下方 20px

thresholds(阈值)是什么?

设置观察触发规则:

scss 复制代码
new IntersectionObserver(callback, {
  thresholds: [0, 0.5, 1]
})
threshold 意味
0 刚相交/离开 触发
0.5 至少一半在参照区域才触发
1 完全进入参照区域才触发

thresholds 越高,需要更"深入"进入参照区域才算触发。

也可以根据微信小程序文档 developers.weixin.qq.com/miniprogram... 下载demo自己修改参数打印res,就可以更生动的体会。

相关推荐
weixin_4434785121 分钟前
Flutter第三方常用组件包之路由管理
前端·javascript·flutter
武藤一雄25 分钟前
C# 异步回调与等待机制
前端·microsoft·设计模式·微软·c#·.netcore
啥都不懂的小小白32 分钟前
前端CSS入门详解
前端·css
林恒smileZAZ1 小时前
前端大屏适配方案:rem、vw/vh、scale 到底选哪个?
开发语言·前端·css·css3
QQ5110082851 小时前
基于区块链的个人医疗咨询挂号信息系统vue
前端·vue.js·区块链
程序员小寒3 小时前
JavaScript设计模式(八):命令模式实现与应用
前端·javascript·设计模式·ecmascript·命令模式
wgod3 小时前
new AbortController()
前端
UXbot3 小时前
UXbot 是什么?一句指令生成完整应用的 AI 工具
前端·ai·交互·个人开发·ai编程·原型模式·ux
棒棒的唐3 小时前
WSL2用npm安装的openclaw,无法正常使用openclaw gateway start启动服务的问题
前端·npm·gateway
哔哩哔哩技术4 小时前
使用Compose Navigation3进行屏幕适配
前端