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

相关推荐
椰羊~王小美4 分钟前
前后端 格式化货币的方法
java·前端
苯酸氨酰糖化物4 分钟前
HTML+CSS学信网学籍学历查询页面-支持任意修改内容信息
前端·css3·html5·娱乐
幻云20105 分钟前
Next.js 之道:从入门到精通
前端·javascript·vue.js·人工智能·python
2501_9445215910 分钟前
Flutter for OpenHarmony 微动漫App实战:标签筛选功能实现
android·开发语言·前端·javascript·flutter
EndingCoder14 分钟前
构建工具集成:Webpack 和 TypeScript
前端·webpack·typescript
卡西里弗斯奥17 分钟前
【Tomcat】部署Web服务器之Tomcat
服务器·前端·tomcat
Sheldon一蓑烟雨任平生33 分钟前
Sass 星空(Sass + keyframes 实现星空动画)
前端·css·vue3·sass·keyframes
⑩-40 分钟前
VUE3学习
前端·javascript·vue.js
Mr Xu_1 小时前
Vue 3 中使用 mitt 实现组件间通信的实践与解析
前端·javascript·vue.js
呃m1 小时前
更好地使用Google Chrome
前端·chrome