8***@qq.com
8***@qq.com
  • 发布:2019-11-05 17:04
  • 更新:2019-12-09 15:47
  • 阅读:1339

【报Bug】页面调用 uni.pageScrollTo 后调用 boundingClientRect 接口会报错

分类:uni-app

详细问题描述

页面中调用 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]

2019-11-05 17:04 负责人:无 分享
已邀请:
8***@qq.com

8***@qq.com (作者)

不是我瞎编,这个真是BUG。来个人看看啊

8***@qq.com

8***@qq.com (作者)

顶顶顶顶顶

8***@qq.com

8***@qq.com (作者)

自己找到问题了 duration 要设为 0

1***@qq.com

1***@qq.com - 我就是我,不一样的烟火

遇到同样得问题,在小程序端不会,app端就跟你报一样的错误

DCloud_uniCloud_WYQ

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

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

该问题目前已经被锁定, 无法添加新回复