小程序scroll-view自身下拉刷新的实现分享

前几天分享了一个自己做的关于小程序组件扩展的开源项目(传送门) 
本来就是想给自己发布的第一个开源代码骗骗star,结果有不少善良的朋友给文章点赞了,搞得我有点不好意思,所以决定写点干货讲讲具体是怎么实现的。 
其实也比较简单,首先自定义组件下的 scroll-view 高度设为比组件本身高出 40px,即头部显示刷新文字的区域高度,然后让 scroll-view y轴偏移 -40px,这样刷新文字区域就在顶部看不到了,具体css如下:

 


  1. .scroll-view {
  2. height: calc(100% + 40px);
  3. transform: translateY(-40px);
  4. }

然后就是监听 scroll-view 的 onscroll 事件,这里我将下拉刷新的状态分为五种:

 


  1. //这段偷懒没写在代码里,直接用的数字
  2. const _pullDownStatusDic = {
  3. invisiable: 0, //看不见
  4. pulling: 1, //下拉时
  5. release: 2, //可松开刷新时
  6. refresing: 3, //正在刷新
  7. finish: 4, //刷新完成
  8. }

那么在事件监听中根据当前的 scrollTop 来判断应该在哪一种状态:

 


  1. //height就是预设的下拉至多少高度时刷新
  2. if (scrollTop < -1 * height) {
  3. targetStatus = 2;
  4. } else if (scrollTop < 0) {
  5. targetStatus = 1;
  6. } else {
  7. targetStatus = 0;
  8. }

问题来了,什么时候刷新呢?小程序的 scroll-view 并没有 onscrollend 这种事件,于是我想到了 ontouchend,毕竟在手机上也只能用触摸来滑动(点击头部返回顶部除外),所以只需要在 ontouchend 事件中监听如果当前的下拉状态是2(_pullDownStatusDic.release)即松开可刷新时,就触发刷新:

 


  1. if (status === 2) {
  2. this.setData({
  3. pullDownStatus: 3,
  4. })
  5. this.properties.refreshing = true,
  6. this.triggerEvent(‘pulldownrefresh’);
  7. }

当然这个时候还有个问题,我们需要把刷新文字局域显示出来,我们是没办法吧一个 scroll-view 的 scrollTop 设为负数的,所以只能将 scroll-view 的y轴偏移取消来解决(产生的问题就是松手时会有一下弹动,后期会想办法进行优化)  完成刷新后,再将 scroll-view 的y轴偏移通过css动画再变回 -40px(用 translate 而不用 margin 就是为了此处动画的流畅度),这样就完成了一次下拉刷新。

是不是很简单:)  另外还有一些小细节,还有加载更多,还有 xing-image 的一些实现,就更简单了,有兴趣的可以看看源码 

免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。

【小程序源码网资源版权风险说明】:
本站为避免不必要的纷争,分享的所有资源中一切可能有版权风险的资源将全部转载自第三方网站或平台,站长只为大家提供相关资源的介绍和跳转引导。 因可能有疏忽大意,所以如有遗漏资源侵犯了您的合法权利,请联系站长删除。
【小程序源码网资源下载使用说明】:
本站所分享的一切QQ小程序源码,thinkphp整站源码,微信小程序源码,图文教程等资源仅供用户学习参考使用,任何人不得作其他用途,违者自行承担所有责任。
【小程序源码网毫无人看的介绍】:
本站又称Z站,原名贼娘网,开站于2018年,换过三任站长,目前站长是第四任站长,本站是一个主要分享免费开源小程序源码/网站源码/免费素材/教程资源的网站,主要小程序资源有用于学习的小程序源码,也有正版原创可商用的小程序源码,是一个公益博客型网站。
【小程序源码网原创源码版权申明】:
未经小程序源码网许可,任何人不得擅自使用本站原创首发源码进行商业行为(除本站VIP用户在期限内,版权无使用限制),否则将依法承担相应赔偿责任。
【小程序源码网转载文章版权申明】:
本站所转载的QQ小程序或微信小程序源码与其他资源仅供学习,任何人不得作其他用途,违者自行承担所有责任。
【小程序源码网站长最后的屁话】:
如有您认为本站有任何侵犯您合法权益的文章,或者您有什么疑问需求,欢迎联系站长QQ,站长24小时在线,备注公司名称和源码版权问题或者需要小程序定制开发等站长业务类型可急速处理,如果您只是交流小程序的一些开发问题或源码问题可以加入QQ群讨论,就不用加站长啦,对于白嫖党,QQ群才是处理问题的天堂,当然站长也欢迎大家骚扰~
小程序源码网 » 小程序scroll-view自身下拉刷新的实现分享
嘿,投喂下嘛!