小程序的scroll-view组件和全局配置的上拉加载,下拉刷新的区别

在写订单列表的时候,有一个需求是上拉加载更多,下拉刷新页面,一开始选的是小程序的scroll-view组件,写完之后发现问题蛮多的,查了很多文档,后来重写了一遍,换成了全局的方法,下面我就说一下这两种方式的用法和感受吧!

scoll-view

用法

使用scroll-view时需要给它一个固定的高度,添加上拉、加载事件,中间部分就是内容,scroll-view相当于一个容器。

<scroll-view
  scroll-y
  style="height: 200px;"
  @scrolltoupper="upper"
  @scrolltolower="lower"
  @scroll="scroll"
  scroll-into-view="{{toView}}"
  scroll-top="{{scrollTop}}"
>
  <div class="order_one" v-for="(item, index) in orderLists" :key="index">
      ...
  </div>
</scroll-view>

注意:

由于使用的是mppvue框架搭建的小程序,其中的事件需要写在methods中,小程序组件中的事件都需要去掉bind,替换成@符号,反之则不会触发

缺陷

1.没有上拉加载和下拉刷新的动画,需要自己手动去实现

2.滚动条在最顶部时,下拉刷新无法被触发,需要先上拉出一段距离,才能触发下拉刷新事件,这也是最后放弃scroll-view的主要原因

全局配置的方法

用法

1.在app.json中写入下面配置

{
 "enablePullDownRefresh": true,
 "backgroundTextStyle":"dark",
 "onReachBottomDistance":50,
}

2.在对应的页面中(.vue后缀)写入方法,这两个方法应该与methods平级,否则无法触发

// 下拉刷新
   onPullDownRefresh () {
     this.orderLists.length = 0
     this.loadingOrderLists()
     // 停止下拉刷新
     wx.stopPullDownRefresh()
   },
   // 上拉加载
   onReachBottom () {
     console.log('bottom')
     if (this.remainListsLength > 0) {
       this.params.page++
       this.loadingOrderLists()
       this.scrollStatus = true
     } else {
       this.scrollStatus = false
     }
   }

注意:

1.scroll-view和全局配制方法最好不要同时使用,将不会触发scroll-view
解决方法:当两者同时存在时,改scroll-view为view,改bindscrolltolower为onReachBottom函数。这样在上拉加载,跟下拉刷新同时存在的时候,“enablePullDownRefresh”:true就可以生效了。

2.如果只想某个页面配置下拉刷新,只需要在对应的页面新建一个main.json文件,然后将之前的app.json中配置写入main.json文件中即可。

优势

  1. 自带下拉刷新的动画
  2. 不会出现滚动条在顶部时无法触发下拉事件

先写到这吧。。。

Logo

前往低代码交流专区

更多推荐