• 微信小程序实现懒加载追加数据方法


    业务中我们常会遇到图片较多、或者数据较多的列表,一次渲染出来的话轻则渲染时间过长,重则可能直接罢工白屏,什么都渲染不出来,这个时候懒加载(只渲染视口中的数据)就很有必要了,然后每次再追加一定的条数。

    思路:

    进入页面初始化,首先 voteList 数组加载前10条(数量根据实际需要),然后每当用户下拉到底部后,触发onReachBottom函数,追加后10条到 voteList 数组中,循环直到全部加载完毕,显示“全部加载完毕”等提示语,此时无法下拉。

    代码:

    wxml:

    <view class="vote_list flex-row">
        <view class="item" wx:for="{{voteList}}" wx:key="{{item.contentId}}">
          <view class="image" bindtap="popupVideo" data-item="{{item}}" >
            <image class="img" mode="widthFix" src="{{item.contentpic50}}"></image>
            <image class="play_icon" src="../../images/video-icon.png"></image>
          </view>
          <view class="title" bindtap="popupVideo" data-item="{{item}}"><text>{{item.contentname}}</text></view>
          <view class="author">{{item.authorName}}</view>
        </view>
      </view>

    js:

    var api = require('../../api.js');
    var MD5 = require('../../utils/MD5.js');
    var app = getApp();
    Page({
    
      /**
       * 页面的初始数据
       */
      data: {
        Phone: '',
        token: '',
        voteList: [],
        allList: [],
        currentNo: 10
      },
    
      /**
       * 生命周期函数--监听页面加载
       */
      onLoad: function (options) {
        var Phone = wx.getStorageSync('Phone')
        this.setData({
          Phone: Phone
        })
        this.getList()
      },
    
      // 列表
      getList() {
        var that = this
        wx.request({
          url: api.wx.getVoteList
          method: 'get',
          data: app.getNewMD5({
            t: that.data.token
          }),
          success: function (res) {
            // console.log(res.data.data.content)
            if (res.data.code == '200') {
              var totalList = res.data.data.content
              var initList = []
              for (var i = 0; i < 10; i++) {
                initList.push(totalList[i])
              }
              that.setData({
                voteList: initList,
                allList: res.data.data.content
              })
              console.log(that.data.voteList)
            }
          }
        })
      },
    
      /**
       * 页面上拉触底事件的处理函数
       */
      onReachBottom: function () {
        var allList = this.data.allList
        var currentNo = this.data.currentNo
        var initList = []
        console.log(currentNo, allList.length)
        // 剩余条数
        var surplus = allList.length - currentNo
        if (surplus >= 10) {
          for (var i = 0; i < currentNo + 10; i++) {
            initList.push(allList[i])
          }
          console.log('initList', initList)
          this.setData({
            currentNo: currentNo + 10,
            voteList: initList
          })
        } else {
          for (var i = 0; i < currentNo + surplus; i++) {
            initList.push(allList[i])
          }
          console.log('initList', initList)
          this.setData({
            currentNo: currentNo + surplus,
            voteList: initList
          })
        }
      }
    
    })

  • 相关阅读:
    大二下学期第一次结对作业(第二阶段)
    大二下学期阅读笔记(人月神话)
    大二下每周总结
    大二下学期第一次结对作业(第二阶段)
    大二下学期第一次结对作业(第二阶段)
    elasticsearch mappings之dynamic的三种状态
    elasticsearch mapping映射属性_source、_all、store和index
    Java学习
    Java学习
    Java学习
  • 原文地址:https://www.cnblogs.com/joe235/p/15179069.html
Copyright © 2020-2023  润新知