微信小程序:下拉刷新,上拉加載

下拉刷新和上拉加載是兩個獨立又聯(lián)系的功能,下拉刷新除了重新請求服務(wù)器數(shù)據(jù)外還要對之前的狀態(tài)和頁碼進(jìn)行初始化,而上拉加載需要服務(wù)器端有分頁機(jī)制,和內(nèi)存中數(shù)據(jù)的添加和頁碼的對應(yīng)變化,以及狀態(tài)的變化。


下拉刷新,上拉加載

小程序?qū)ο吕⑿率怯幸欢ㄖС值?,那就是json文件里的enablePullDownRefresh參數(shù),設(shè)置enablePullDownRefresh后會觸發(fā)js文件中的onPullDownRefresh方法,你可以在里面做要做的事情,比如對頁面的初始化,對數(shù)據(jù)列表的清空等,初始化數(shù)據(jù)后,記得最后執(zhí)行一次wx.stopPullDownRefresh(),將下拉關(guān)閉,否則那些小點點是不會消失的。

tips:下拉刷新的樣式在一定程度上也可以通過backgroundColor和backgroundTextStyle改變。由于enablePullDownRefresh默認(rèn)為false ,這里enablePullDownRefresh=true設(shè)置后才會觸發(fā)onPullDownRefresh方法,還有模擬器測試的時候需要按住頁面后下拉,才會看到刷新提示

下拉刷新

  /**
   * 頁面相關(guān)事件處理函數(shù)--監(jiān)聽用戶下拉動作
   */
  onPullDownRefresh: function () {
    console.log("下拉刷新")
    let that = this;
    that.setData({
      pageIndex: 0, // 每次觸發(fā)下拉事件pageIndex=0
    })
    that.gainLoadingListData()
  },

  /**
   * 初始化數(shù)據(jù)或是下拉刷新數(shù)據(jù) 
   */
  gainLoadingListData:function() { 
    let that = this;
    let pageIndex = that.data.pageIndex;
    let userCode = that.data.userCode;
    console.log("pageIndex == ", pageIndex);
    networking.gainData(userCode, pageIndex, function (data) {
      wx.stopPullDownRefresh(); // 數(shù)據(jù)請求成功后,停止刷新
      var array = data;
      that.setData({
        array: array,
      })
    }, function (message) {
      console.log("message=", message)
    })
  },

上拉加載,獲取更多數(shù)據(jù)主要利用了js中的onReachBottom方法,它表示“頁面上拉觸底事件的處理函數(shù)”,我們就在這時請求服務(wù)器獲取新的數(shù)據(jù)并且添加到現(xiàn)有數(shù)據(jù)下面。

 /**
   * 頁面上拉觸底事件的處理函數(shù)
   */
  onReachBottom: function () {
    console.log("上拉加載")
    let that = this;
    that.setData({
      loading: true,  //把"上拉加載"的變量設(shè)為false,顯示 
      pageIndex: that.data.pageIndex + 5

    })
    // 上拉獲取更多數(shù)據(jù)
    this.gainMoreLoadingListData() 
  },
/**
   * 上拉獲取更多數(shù)據(jù)
   */
  gainMoreLoadingListData: function () {
    let that = this;
    let pageIndex = that.data.pageIndex;
    let userCode = that.data.userCode;
    console.log("pageIndex == ", pageIndex);
    networking.gainData(userCode, pageIndex, function (data) {
      if (data.length != 0) { // 數(shù)組不為空
        var array = that.data.array.concat(data);
        for (var index in array) {
          var date = new Date(array[index].orderTime)
          var y = date.getFullYear();
          var m = (date.getMonth() + 1);
          var d = date.getDate();
          var h = date.getHours();
          var mm = date.getMinutes();
          m = m > 9 ? m : '0' + m;
          d = d > 9 ? d : '0' + d;
          // h = h > 9 ? h : '0' + h;
          // mm = mm > 9 ? mm : '0' + mm;
          var dateStr = [y, m, d,].join('-');
          // var timeStr = [h, mm].join(':')
          // var format = dateStr + " " + timeStr;
          var format = dateStr
          array[index].orderTime = format;
        }
        that.setData({
          array: array,
          loading: true,  //把"上拉加載"的變量設(shè)為false,顯示 
        })
      } else { // 數(shù)組為空
        that.setData({
          loading: false,  //把"上拉加載"的變量設(shè)為true,隱藏
          loaded: true,  //把"上拉加載完成"的變量設(shè)為false,顯示

        })
      }

    }, function (message) {
      console.log("message=", message)
    })
  },

具體實現(xiàn)可以參考我的GitHub 上的代碼。其中實現(xiàn)了兩種方式加載,一種是下拉刷新和上拉加載結(jié)合,一種是單獨的上拉加載

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容