详细问题描述
页面中调用 uni.pageScrollTo 后调用接口 uni.createSelectorQuery().in(this).select(".xxx").boundingClientRect(el=>{}) 报错 Script error.filename:lineno:0
如果不调用 uni.pageScrollTo 则正常
(DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题)
[内容]
重现步骤
[步骤]
在页面中先调用 uni.pageScrollTo
然后在调用 uni.createSelectorQuery().in(this).select(".xxx").boundingClientRect(el=>{}) 就报错
[结果]
Script error.filename:lineno:0
[期望]
[如果语言难以表述清晰,拍一个视频或截图,有图有真相]
IDE运行环境说明
HBuilderX 2.3.7.20191024 HBuilderXAlpha
[HBuilder 或 HBuilderX。如果你用其他工具开发uni-app,也需要在此说明]
[IDE版本号]
HBuilderX:2.3.7.20191024
HBuilderX-Alpha:2.3.9.20191104-alpha
[windows版本号]
[mac版本号]
uni-app运行环境说明
[运行端是h5或app或某个小程序?]
app
[运行端版本号]
[项目是cli创建的还是HBuilderX创建的?如果是cli创建的,请更新到最新版cli再试]
[编译模式是老模板模式还是新的自定义组件模式?]
App运行环境说明
[Android版本号]
[iOS版本号]
12.1.4
[手机型号]
iphone7
[模拟器型号]
附件
[IDE问题请提供HBuilderX运行日志。菜单帮助-查看运行日志,点右键打开文件所在目录,将log文件压缩成zip包上传]
[App问题请提供可重现问题的代码片段,你补充的细一点,问题就解决的快一点]
[App安装包或H5地址]
[可重现代码片段]
联系方式
[QQ]
7 个回复
8***@qq.com (作者)
不是我瞎编,这个真是BUG。来个人看看啊
8***@qq.com (作者)
顶顶顶顶顶
8***@qq.com (作者)
自己找到问题了 duration 要设为 0
1***@qq.com - 我就是我,不一样的烟火
遇到同样得问题,在小程序端不会,app端就跟你报一样的错误
DCloud_uniCloud_WYQ
是在onPageScroll里面调用的吗
1***@qq.com
//获取指定节点信息
getScrollHeight(dom){
let that=this;
const query = uni.createSelectorQuery();
// console.log('query',query)
query.select('#'+dom).boundingClientRect()
query.selectViewport().scrollOffset();
query.exec(res=>{
console.log('res',res)
if(res[0] && res[1]){
uni.pageScrollTo({
scrollTop:res[0].top+res[1].scrollTop,
duration:300
})
}
})
},
2019-11-07 14:47
DCloud_uniCloud_WYQ
回复 1***@qq.com: 你这写法有点神奇啊
2019-11-07 14:50
1***@qq.com
ios报错: Script error.filename:lineno:0
安卓报错: TypeError: h.push is not a function 等
小程序正常滚动到指定的位置
功能,顶部tab栏 点击,跳转到对应的内容,实现锚点的功能而已,小程序正常,app就是 只跳转一次,第二次以后就不正常了
2019-11-07 14:50
DCloud_uniCloud_WYQ
回复 1***@qq.com: scrollview 有一个scroll-into-view可以更方便的实现这个功能
2019-11-07 14:52
1***@qq.com
回复 DCloud_uniCloud_WYQ: 好的,谢谢,我去试一下
2019-11-07 14:53
8***@qq.com (作者)
回复 1***@qq.com: uni.pageScrollTo({
scrollTop:res[0].top+res[1].scrollTop,
duration:0})
将 duration 设为 0 就正常了
2019-11-07 17:51
fjy1012
回复 1***@qq.com: 安卓报错: TypeError: h.push is not a function 等可以加个duration:0就不会了
2019-11-14 16:16
7***@qq.com - 90后IT男
我也遇到了,将duration设置为0就能解决 不明白是为什么。。。
1***@qq.com
你是不是也想实现描点功能,给你一个解决方法,先获取dom节点高度,再来滚动,数据一开始加载的时候就获取到这个高度,然后点击的时候就可以直接滚动了
2019-11-28 16:49
妥强
回复 1***@qq.com: 如果页面布局在操作工程中变了,之前记录的高度就不准确了。
2019-12-09 15:45
妥强 - 我是妥强
我这边也是想实现个锚点功能。如果duration值不是0就是报错。但是duration设成0,滚动的太生硬了。希望官方解决这个bug。我的写法如下:
anchorTop(id){
console.log('id', id)
if(!id) return
let query = uni.createSelectorQuery().in(this)
query.selectViewport().scrollOffset()
query.select("#"+id).boundingClientRect()
query.exec(res=>{
console.log('res[0]', res[0])
console.log('res[1]', res[1])
uni.pageScrollTo({
duration: 0, // 非0值就会报错, uni-app bug
scrollTop:res[0].scrollTop + res[1].top
})
})
},
DCloud_uniCloud_WYQ
使用V3版本没有这个问题
2019-12-09 15:51
妥强
回复 DCloud_uniCloud_WYQ: 我这hbuilderx是最新版的2.4.2.20191115,你怎么下载的V3版本啊?
2019-12-09 16:01
DCloud_uniCloud_WYQ
回复 妥强: V3是指编译器版本,不是HBuilderX版本, https://ask.dcloud.net.cn/article/36599
2019-12-09 16:41