小程序下拉刷新-onPullDownRefresh不触发-可以通过scroll-view自定义下拉刷新

小程序下拉刷新-onPullDownRefresh不触发-可以通过scroll-view自定义下拉刷新

下程序下拉可以使用默认的下拉刷新,方法是页面json文件开启下拉刷新,js文件通过onPullDownRefresh事件调接口刷新数据

但是如果你的页面中是用的scroll-view,这样在scroll-view区域是无法触发下拉刷新事件的,这是因为scroll-view的限制,官方有讲的,

那么这个时候我们就只能通过自定义下拉刷新来实现了

其实不难官方都有讲的就是scroll-view这个的介绍里,并且有demo演示,文档入口

先看一下我的效果:(不满意或者不符合你的需求就跳过吧)

1.模板文件index.wxml

<scroll-view style="height:{{windowHeight - tabHeight - spacing}}px;"  
    scroll-y 
    bindscrolltolower="loadMore" refresher-enabled="{{true}}"
    refresher-triggered="{{refresherTriggered}}"
    refresher-threshold="{{60}}"
    refresher-default-style="none"
    refresher-background="#fff"
    bindrefresherpulling="onPulling" 
    bindrefresherrefresh="onRefresh"             
    bindrefresherrestore="onRestore" 
    bindrefresherabort="onErabort"
>
    <!--这里是下拉显示的效果-->
        <view slot="refresher" class="refresh-container disf faic" style="display:       block;width: 100%; height: 80px;  display: flex; align-items:center;justify-content:center;box-sizing: border-box;border-bottom:1px solid #f5f5f5">
            <view class="disf faic fc6" style="position: absolute;">
              <view class="disf faic" style="width:70rpx"><image animation="{{animation}}" class="top-arrow" mode="widthFix" src="/images/top-arrow.png"></image></view>
              <view style="width:300rpx;padding-right:30rpx">
                <view class="fz30 textac">{{refreshText}}</view>
                <view class="fz22 textac">上次更新时间:{{lastRefresh3}}</view>
              </view>
            </view>
        </view>
    <!--这里是数据-->
    <view>
    </view>
</scroll-view>

2.js文件index.js

/*onready中我创建了一个下拉时箭头旋转的动画*/
onReady: function () {
    _animation = wx.createAnimation({
      duration: 100,
      timingFunction: 'linear', // "linear","ease","ease-in","ease-in-out","ease-out","step-start","step-end"
      delay: 0,
      transformOrigin: '50% 50% 0'
    })
  },
  //执行动画的方法
  rotateAni: function (n) {
    _animation.rotate(-180 * (n)).step()
    this.setData({
      animation: _animation.export()
    })
  },
  //下拉没有松手执行此事件
  onPulling:function(e){
    //这个60对应wxml中的refresher-threshold值
    //超过这个阀值改变文字及箭头状态
    if(e.detail.dy>=60){
      if(_rotateNumber==0){//这个判断表示已经更改过状态了不用再次更改,否则频繁setdata耗性能
        this.setData({
          refreshText: '松开刷新数据'
        })
        this.rotateAni(++_rotateNumber)
      }
    //低于这个阀值还原状态
    }else{
      if(_rotateNumber==1){//这个判断表示已经更改过状态了不用再次更改,否则频繁setdata耗性能
        this.setData({
          refreshText: '下拉刷新'
        })
        this.rotateAni(--_rotateNumber)
      }
    }
  },
   //大于阀值并且松手了会触发刷新
  onRefresh:function(){
    var that = this;
    this.rotateAni(0)
    this.setData({
      refreshText: '正在加载'
    })
    //这里我们先等动画完毕再设置refresherTriggered: false,因为设置了它加载信息就隐藏了就看不到动画了
    setTimeout(function(){
      that.setData({
        refresherTriggered: false
      },100)
    })
    
    this.setData({
      list:[],
      page:1,
      end:false
    })
    this.getPractice();
    this.getAllClass();
  },
   //这是你下拉超过阀值然后没有松手又滑回去小于阀值,只做状态显示修改不触发更新
  onRestore:function(){
    var that = this;
    this.setData({
      refreshText: '下拉刷新'
    })
    this.rotateAni(0)
    setTimeout(function(){
      that.setData({
        refresherTriggered: false
      },100)
    })
  },
   //中断下拉,也是只做状态修改
  onErabort:function(){
    var that = this;
    this.setData({
      refreshText: '下拉刷新'
    })
    this.rotateAni(0)
    setTimeout(function(){
      that.setData({
        refresherTriggered: false
      },100)
    })
  },

基本就是这样了,动画效果可以根据自身修改,有问题可留言,

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
scroll-view组件可以用于实现自定义下拉刷新效果。通过设置scroll-view的属性,可以实现自定义下拉刷新动画和触发事件。在wxml部分,可以设置scroll-viewrefresher-enabled属性为true,表示开启下拉刷新功能。同时,可以设置refresher-threshold属性来定义下拉刷新触发阈值,当下拉距离超过该阈值时,触发下拉刷新事件。还可以设置refresher-triggered属性来控制下拉刷新的状态,当该属性为true时,表示正在进行下拉刷新。在触发下拉刷新事件时,可以通过bindrefresherrefresh属性绑定一个事件处理函数,用于处理下拉刷新的逻辑。通过在该事件处理函数中,可以自定义下拉刷新的动画效果和数据更新操作。\[2\]\[3\] #### 引用[.reference_title] - *1* [scroll-view实现自定义下拉刷新](https://blog.csdn.net/qq_40666120/article/details/108284680)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [微信小程序scroll-view实现自定义刷新](https://blog.csdn.net/weixin_42883683/article/details/123920355)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值