问题描述
页面A,调用了组件a,点击组件a时获取组件a的位置,使用uni.createSelectorQuery()获取被点击的节点信息,在query.select('.screenBarBox').boundingClientRect()的回调函数中执行页面的方法,第一次正常,第二次报错。
该bug只在APP端出现,H5与微信小程序均表现正常
[内容]
重现步骤
[步骤]
- 点击商品筛选条,如果该筛选条没有在搜索栏下方,调用页面滚动方法,滚动至筛选条到搜索栏下方。
[结果]
第一次页面正常滚动,第二次报错无法滚动,经过多次测试,发现如果在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
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