一文详解 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,就可以更生动的体会。

相关推荐
涵涵(互关)2 分钟前
Naive-ui树型选择器只显示根节点
前端·ui·vue
BY组态11 分钟前
Ricon组态系统最佳实践:从零开始构建物联网监控平台
前端·物联网·iot·web组态·组态
BY组态16 分钟前
Ricon组态系统vs传统组态软件:为什么选择新一代Web组态平台
前端·物联网·iot·web组态·组态
SoaringHeart18 分钟前
Flutter进阶:OverlayEntry 插入图层管理器 NOverlayZIndexManager
前端·flutter
放下华子我只抽RuiKe528 分钟前
React 从入门到生产(四):自定义 Hook
前端·javascript·人工智能·深度学习·react.js·自然语言处理·前端框架
IT_陈寒2 小时前
Redis缓存击穿把我整不会了,原来还有这手操作
前端·人工智能·后端
idcu2 小时前
深入 Lyt.js 组件系统:L2 渲染引擎层的核心
前端·typescript
这是程序猿3 小时前
Spring Boot自动配置详解
java·大数据·前端
文心快码BaiduComate3 小时前
干货|Comate Harness Engineering工程实践指南
前端·后端·程序员
还有多久拿退休金3 小时前
一张栈的图,治好你面试答不出 script 阻塞的病
前端·javascript