在小程序的开发过程中,有个功能是点击后需要往view层中添加数据内容,在添加后需要将内容滚动到最下面一条,以便有更好的用户体验。
开始是选择了使用wx.pageScrollTo接口,通过获取当前view层的高度来动态的调整pageScrollTo中的scrollTop值
wx.createSelectorQuery().select('.newsContent').boundingClientRect(function (rect) {
// 使页面滚动到底部
wx.pageScrollTo({
scrollTop: rect.height,
duration:1500
})
}).exec()
到目前一切看起来好像很ok,但是。。。
在部分安卓机型中,例如华为等机型会在滚动的时候,触发一下拉刷新,也就是说,在触发wx.pageScrollTo之后,会先滚动到最顶端,触发刷新,再从最顶端滚动到我们需要的位置。(这是十分影响用户体验的,整体效果非常差)
在iphone机型中,在触发wx.pageScrollTo时,如果页面中有fixed定位的元素,定位的元素会跟随页面滚动,再回到位置上
这个问题非常的折磨人,因为pageScrollTo这个api不仅有bug这个bug在不同机型环境下竟然还不一样!!!之后我将pageScrollTo的滚动动画时间duration设置为0后,在真机上,都不会出现抖动的问题,因为这个过程其实是直接跳过了,但是直接出来整体的体验也十分糟糕,出现的非常的唐突。
最后,改使用scroll-view
<scroll-view scroll-y class="container" enable-back-to-top="true" style="height: {{windowHeight}}rpx;" bindscroll="touchclose" scroll-with-animation="true" scroll-top="{{scrollTop}}">
<!-- 内容 -->
<view>-----略------</view>
</scroll-view>
使用scroll-view后可以实现一样的滚动效果,而且是没有抖动的。效果还是比较好的,就我的这个项目来说,用scroll-view的bug要少些,体验要优于pageScrollTo。
ps:关于pageScrollTo的问题,导致安卓和iphone机型不同的原因可能是因为二者小程序运行时候的内核不同,关于该问题的相关的问题解决办法还没有找到比较合适的,小程序社区中有看到有人提出类似问题,但是官方暂时还没有修复pageScrollTo的bug。