-
Notifications
You must be signed in to change notification settings - Fork 100
Open
Labels
questionFurther information is requestedFurther information is requested
Description
问题描述
文档中对 scrollIntoViewByNodeTop 方法的描述存在歧义,可能导致开发者误解其实际行为。
文档描述:
scrollIntoViewByNodeTop(nodeTop, offset, animate)
- nodeTop: 需要滚动的view的top值(通过uni.createSelectorQuery()获取)
- offset: 偏移量,单位为px
实际行为:
根据源码分析,offset 参数并不是滚动的偏移量,而是滚动后元素相对于视口顶部的目标位置。
源码分析
// scroller.js 第 413-446 行
_scrollIntoViewByNodeTop(nodeTop, offset = 0, animate = false) {
this._scrollToY(nodeTop, offset, animate, true);
},
_scrollToY(y, offset = 0, animate = false, addScrollTop = false) {
// ...
if (addScrollTop) {
y += this.oldScrollTop;
}
this.scrollTop = y - offset; // 关键:最终 scrollTop = y - offset
}从公式 scrollTop = (nodeTop + oldScrollTop) - offset 可以推导出:
- 滚动变化量 =
nodeTop - offset - 元素最终位置 =
nodeTop - 滚动变化量= offset
实际验证
我在开发朋友圈评论功能时,需要在键盘弹出后将评论按钮滚动到键盘上方。
- 评论按钮当前 top = 699px
- 键盘顶部相对于视口 = 426px
- 评论按钮高度 = 23px
- 期望评论按钮底部贴合键盘顶部,即评论按钮顶部位于 426 - 23 = 403px
调用 scrollIntoViewByNodeTop(699, 403) 后,评论按钮确实移动到了距视口顶部 403px 的位置,完美贴合键盘。
这证明 offset 的实际含义是"目标位置",而非"偏移量"。
建议修改
将文档描述修改为:
scrollIntoViewByNodeTop(nodeTop, targetTop, animate)
- nodeTop: 需要滚动的view的top值(通过uni.createSelectorQuery()获取)
- targetTop: 滚动后元素距离视口顶部的目标位置,单位为px
- animate: 是否展示滚动动画,默认为否
或者保留 offset 命名,但明确说明:
scrollIntoViewByNodeTop(nodeTop, offset, animate)
- nodeTop: 需要滚动的view的top值(通过uni.createSelectorQuery()获取)
- offset: 滚动后元素距离视口顶部的位置,单位为px(注意:并非滚动偏移量)
- animate: 是否展示滚动动画,默认为否
环境信息
- z-paging 版本:2.8.8
- 平台:微信小程序
相关链接
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
questionFurther information is requestedFurther information is requested