HawkLu92
HawkLu92
  • 发布:2019-11-11 18:20
  • 更新:2020-03-12 13:16
  • 阅读:1946

【报Bug】boundingClientRect回调中,组件调用页面的方法,第二次会报错

分类:uni-app

问题描述

页面A,调用了组件a,点击组件a时获取组件a的位置,使用uni.createSelectorQuery()获取被点击的节点信息,在query.select('.screenBarBox').boundingClientRect()的回调函数中执行页面的方法,第一次正常,第二次报错。
该bug只在APP端出现,H5与微信小程序均表现正常

[内容]

重现步骤

[步骤]

  1. 点击商品筛选条,如果该筛选条没有在搜索栏下方,调用页面滚动方法,滚动至筛选条到搜索栏下方。

[结果]
第一次页面正常滚动,第二次报错无法滚动,经过多次测试,发现如果在query.select('.screenBarBox').boundingClientRect()的回调中调用页面的方法就会出现该bug,如果是在回调外面,不会出现该问题。

报错信息:

[期望]
未滑动前页面效果

滑动后页面效果

IDE运行环境说明

HBuilderX 2.3.7.20191024

系统环境:win7 SP1

uni-app运行环境说明

[运行端] 只在APP中发现该问题,小程序与H5表现正常

[运行端版本号] HBuilderX 2.3.7.20191024

[项目创建] 项目为 HBuilderX创建

[编译模式] 自定义组件模式

App运行环境说明

目前公司几台测试机都出现该问题:

小米 MI5 安卓7.0
魅蓝Max 安卓7.0
三星 Galaxy S7 安卓8.0

附件

[IDE问题请提供HBuilderX运行日志。菜单帮助-查看运行日志,点右键打开文件所在目录,将log文件压缩成zip包上传]

[App问题请提供可重现问题的代码片段,你补充的细一点,问题就解决的快一点]

[App安装包或H5地址]

[可重现代码片段]
父页面组件调用:

<screenBar  v-on:caonima="caonima" :isFiexd="isFiexd"></screenBar>

父页面方法:

// 页面滚动到指定位置  
caonima:screenTop=>{  
    console.log("父组件方法调用");  
    uni.pageScrollTo({  
        scrollTop: screenTop,  
        duration: 300  
    });   
},

组件点击事件:

// 点击筛选条,页面向上滑动至筛选条停靠在顶部  
childMd(e) {  
    var _this=this;  
    const query = uni.createSelectorQuery().in(this);  
    query.select('.screenBarBox').boundingClientRect(data => {  
        //如果筛选条没有到达顶部  
        if(data.top> getApp().globalData.G_SEARCHBAR.height){  
            // 调用index滚动页面  
            this.$emit("caonima", getApp().globalData.G_SCREENBAR.top);    //报错地方  
            // 延时300ms打开pop  
            setTimeout(()=>{  
                this.togglePopup(this.nowPopup);  
            },300)  
        }else{  
            // 直接打开pop  
            this.togglePopup(this.nowPopup)  
        }  
    }).exec();  
},

联系方式

[QQ]2771563102

2019-11-11 18:20 负责人:无 分享
已邀请:
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

this.$emit("caonima", getApp().globalData.G_SCREENBAR.top); 

给这句加个setTimeout 50试试,不行的话把uni.pageScrollTo的duration改成0试一下,另外发帖不要带脏字

  • HawkLu92 (作者)

    第一种方法添加延时还是会出现该bug,第二种设置pageScrollTo的duration为0可以,但是页面效果特别差,页面会瞬间滚动到指定位置;

    因为业务要求点击筛选条时页面要有滚动效果,还有没有其他方案?

    为啥设置了滚动时间会出现这个问题?是bug么?


    另外对帖子中不文明词语深表歉意,因为这个问题困扰了好久,耽误了项目进度。

    2019-11-12 16:56

  • DCloud_uniCloud_WYQ

    回复 HawkLu92: 目前没有准确定位问题,等解决了会在release体现

    2019-11-12 17:47

  • HawkLu92 (作者)

    回复 DCloud_uniCloud_WYQ: 好的,谢谢

    2019-11-12 18:02

bielei

bielei - 90_IT_女_小白

使用pageScrollTo后,点击之后没有滚动

  • HawkLu92 (作者)

    滚动高度有没有设置?scrollTop,我上面的方法是动态获取的高度,你可以先设定一个固定值测试。实在不行贴代码上来看看。

    2019-11-20 14:07

小城独奏

小城独奏

请问这个问题解决了吗,我也遇到了

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