当前位置:首页 > 小程序 > 正文内容

小程序自定义下拉刷新

tigon4年前 (2021-06-04)小程序2199

<scroll-view style='height:100%' scroll-y='{{!isindrag}}' bindscroll='scorll'>
<view class='column' bindtouchstart='start' bindtouchend='end' bindtouchmove='move'>
<view style='height:{{hei}}px;' class='refresh'>{{desc}}</view>
这里是中间刷新的内容

</view>
</scroll-view>

let sy;//记录手指的y坐标
desc: '',//刷新提示语
    hei: 0,//刷新view高度阈值
    scrolltop: 0,//scorll-view滑动离顶部的距离
    isindrag: false,//是否在下拉状态(必须要滑动到顶部才能触发)

start(e) {
    //记录手指触摸是的y坐标
    sy = e.touches[0].clientY   
    console.log('开始触摸 sy : ' + sy + ' scrolltop : ' + this.data.scrolltop)
  },
  move(e) {
    //计算手指滑动的距离
    var delta = e.touches[0].clientY - sy
    console.log('delta : ' + delta)
    //scorll-view滑动到顶部且继续向上滑动时,走scorll-view滑动流程
    if(this.data.hei <= 0 && delta <= 0){
      return
    }
    //scorll-view已经滑动到顶部,继续下拉进入下拉状态
    if (this.data.scrolltop <= 0){
      if (this.data.isindrag == false){
        this.setData({
          isindrag: true
        })
      }
      var tempdelta = 0
      console.log('hei : ' + this.data.hei)
      if(delta > 0){//手指向下滑动
        if (this.data.hei > 50) {//触发阈值,更改状态
          this.setData({
            desc: '松开刷新'
          })
          tempdelta = this.data.hei + delta / (this.data.hei - 50)//增大下拉阻尼感
        } else {
          this.setData({
            desc: '下拉刷新11'
          })
          //手指移动未到阈值,按正常滑动增加高度
          tempdelta = this.data.hei + delta
        }
      } else {//手指向上滑动
        tempdelta = this.data.hei + delta
        //刷新状态view最小为0
        if(tempdelta <= 0){
          tempdelta = 0
        }
        this.setData({
          desc: '下拉刷新22'
        })
      }
      //滑动完成设置刷新view高度
      this.setData({
        hei: tempdelta
      })
    }
    //每次滑动事件后记录y坐标
    sy = e.touches[0].clientY
  },
  end(e) {
    console.log('手指离开')
    //手指离开时,如果阈值大于等于50,则触发刷新
    if(this.data.hei >= 50){
      this.setData({
        desc: '正在刷新...'
      })
      this.setData({
        hei: 50
      })
      //模拟耗时操作,2秒后恢复正常状态
      setTimeout( ()=> {
        sy = 0
        this.setData({
          desc: '', //结果后
          hei: 0,
          isindrag: false,
          scrolltop: 0
        })
      }, 2000)
    }else{//未下拉到阈值,松开时则收起刷新view
      sy = 0
      this.setData({
        desc: '', //收起下拉之后
        hei: 0,
        isindrag: false,
        scrolltop: 0
      })
    }
  },
  scorll(e) {
    //未进入下拉状态时,记录scorll-view滑动距离顶部的距离
    var st = e.detail.scrollTop
    console.log('滚动 st : '+st)
    if (this.data.isindrag == false){
      this.setData({
        scrolltop: st
      })
    }
  }

版权声明:本文由Web学习之路发布,如需转载请注明出处。

本文链接:https://webge.net/?id=122

“小程序自定义下拉刷新” 的相关文章

小程序 bind与catch 区别

bind和catch后可以紧跟一个冒号,+事件分类例如:写法:1,bindtap="函数名"2,bind:tap="函数名"  这里这个tap可以换成需要的事件 双击,单击,滑动之类的bind是带有冒泡的catch不带有冒泡...

小程序如果以打包浏览的时候太大怎么处理---分包

小程序如果以打包浏览的时候太大怎么处理---分包

小程序如果以打包浏览的时候太大怎么处理—分包 类似这样的目录来分包处理 app.json需要做分包路径处理 当如果用跳转路径分包路径的时候例如...

小程序列表展开收起功能

小程序列表展开收起功能

index.wxml <block wx:for-items="{{list}}" wx:key="{{item.id}}"> <view class="kind-list-item"> <...

小程序页面开启下拉刷新不回弹问题

onPullDownRefresh: function () { // 停止下拉动作 wx.stopPullDownRefresh(); //添加这句就可以了 if(this.data.searchContent){ this.setSearchListDataFn(th...

小程序 a到b到c ,从c直接回到a

1A页面跳转到B wx.navigateTo({ url: `/pages/signUp/A` }) 2,B页面到C wx.navigateTo({ url: `/pages/signUp/C` }) 从c加到A页面 在c页面写 onUnload: fun...

小程序分享功能

小程序分享功能

小程序分享功能 /** * 用户点击右上角分享 */ onShareAppMessage: function () { return { title: this.data.goodsInfo.goods_name, path: `/...