動態

詳情 返回 返回

支付寶小程序開發上拉加載實現 - 動態 詳情

寫這篇文章起源於我們的產品經理提的一個需求,我們是做一個課程購買的小程序。每個課程下面有n節課。當點課的時候跳轉到課程學習頁面,並且查詢當前課在設定分頁數和分頁大小(默認7)所在的列表,以及它的位置。
如圖:

image.png
每節課對應一個序號。默認展示7條數據。當用户上拉的時候加載前面7條數據(即第一頁),下拉加載後面一個分頁7條數據。
那麼加載後面一個分頁數據我們可以通過小程序onReachBottom生命週期函數進行加載。
那麼前面的呢。
我起初的構思是通過生命週期的onPullDownRefresh()上拉刷新的組件來實現。但是有問題,當數據是最後一條,如圖
image.png

即要上拉兩次才能加載完數據 就出現問題了,第一次請求的時候是可以的。但是無間隔第二次請求就沒法觸發onPullDownRefresh函數,原因後來看了下,是因為上拉刷新組件有一個動畫效果,動畫效果是在數據處理完以後才停止的。並且它那個是全局配置的,默認是配置在頁面頂部的,跟需求不符。所以我索性自己寫了一個上拉事件。就是通過touchStart監聽初始座標,然後touchEnd監聽最後手指離開的座標。詳情見代碼:

touchStart(ev){
    console.log(ev.changedTouches)
    touchYConfig["touchStartPageY"] = ev.changedTouches[0].clientY;
  },
  async touchEnd(ev){
    console.log(ev.changedTouches)
    touchYConfig["touchEndPageY"] = ev.changedTouches[0].clientY;
    if(touchYConfig["touchEndPageY"] - touchYConfig["touchStartPageY"] > 150){
       console.log('onScrollToUpper')
    //this.disabledYScroll();
    let lessonListConfig = this.data.lessonListConfigUp;
    let querySubjectId = this.data.queryCourseId;
    let lessonList = this.data.lessonList;
    lessonListConfig.currentPage--;
    if (lessonListConfig.currentPage >= 1) {
      my.showLoading({
      content: '數據刷新中...',
      delay: '0',
    });
      let params = {
        pageNum: lessonListConfig.currentPage,
        pageSize: 7,
        subjectId: querySubjectId
      }
      let result = await this.getLessonListByCourseId(params);
      let list = result.courses.list.concat(lessonList);
      const { totalPage } = this.data.lessonListConfigUp;
      this.setData({
        lessonList: list,
        lessonListConfigUp: {
          currentPage: lessonListConfig.currentPage,
          totalPage,
        }
      }, () => {
        my.hideLoading();
      })
    } else {
      this.setData({
        topNoData: true
      })
    }
  }
  },

這樣就實現了一個絲滑的上拉加載數據功能。

user avatar dingtongya 頭像 yinzhixiaxue 頭像 front_yue 頭像 littlelyon 頭像 u_17443142 頭像 jiavan 頭像 xiaolei_599661330c0cb 頭像 zzd41 頭像 nqbefgvs 頭像 assassin 頭像 user_ze46ouik 頭像 heath_learning 頭像
點贊 45 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.