• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

下拉刷新、上拉加载更多(微信小程序) - 爱善品

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

下拉刷新、上拉加载更多(微信小程序)

  需求分析

      微信小程序开发,经常需要下拉刷新、上拉加载更多进行网络请求。主要的需求如下:

      (1)页面初始化时,自动下拉刷新,下拉操作时,激发下拉刷新,下拉刷新的同时,更新、显示数据。

      (2)当滑动到底部上拉时,加载更多数据,如果没有更多的数据,则提示“没有更多啦”。

      (3)交互反馈,给用户一个良好的体验。

 

  实现逻辑

     (1)用户下拉操作时,会激发onPullDownRefresh 函数。在onPullDownRefresh 函数中发起网络请求,可以实现下拉刷新,更新、显示数据。在生命周期函数onLoad中, 调用onPullDownRefresh 函数,实现页面初始化时,自动下拉刷新。

     (2)当滑动到底部上拉时,会激发onReachBottom函数。在onReachBottom函数中发起网络请求,拼接地址,实现第1次上拉加载第2页;第n次上拉,加载第(n + 1)页。如果没有更多的数据,则提示“没有更多啦”。

     (3)交互反馈:网络请求之前,使用消息提示框提示“刷新数据”、或“加载更多”,请求之后隐藏提示。下拉刷新请求之后,结束下拉刷新。

        另外,在onPullDownRefresh 函数中,将页面数据(dataList)设置为第一页数据,将页面变量(page)设置为初始值。如果用户上拉加载更多后,又下拉刷新,那么清除原来的数据,只显示新的第一页的数据,当用户再次滑动上拉时,再加载更多。

  数据接口

      第一页的数据接口:

   http://app.api.autohome.com.cn/autov5.0.0/news/newslist-pm1-c0-nt1-p1-s30-l0.json
第n页的数据接口(
lasttime是已下载数据最后一条的lasttime):
http://app.api.autohome.com.cn/autov5.0.0/news/newslist-pm1-c0-nt1-pn-s30-llasttime.json

 

  项目源码

      1、JSON文件,在window选项中开启enablePullDownRefresh

"enablePullDownRefresh": true

      2、JS文件

// 第一页数据接口
var urlPage1 = "http://app.api.autohome.com.cn/autov5.0.0/news/newslist-pm1-c0-nt1-p1-s30-l0.json";
// 定义page变量,用于实现加载更多
var page = 1;
Page({
  data: {
    dataList: []
  },
  onLoad: function (options) {
    // 调用下拉刷新函数
    this.onPullDownRefresh()
  },
  // 定义onPullDownRefresh 函数,用户下拉操作时会激发
  onPullDownRefresh: function () {
    // 开启消息提示框
    wx.showToast({
      title: \'刷新数据\',
      icon: \'loading\',
      duration: 10000
    })
    var that = this;
    wx.request({
      url: urlPage1,
      data: {},
      method: \'GET\',
      success: function (res) {
        // 将页面数据(dataList)设置为第一页数据,将页面变量(page)设置为初始值。
        that.setData({
          dataList: res.data.result.newslist
        });
        page = 1;
      },
      complete: function () {
        // 结束下拉刷新shu刷新
        // 隐藏提示框
        wx.stopPullDownRefresh()
        setTimeout(function () {
          wx.hideToast()
        }, 800)
      }
    })
  },
  // 定义onReachBottom函数,当视图滑动到底部上拉时激发
  onReachBottom: function () {
    // 因为分页加载的数据太多,无法模拟没有数据的情况,所以使用page >= 4来模拟。
    if (page < 4) {
      // 已下载数据的最后一条的lasttime
      var lasttime = this.data.dataList[this.data.dataList.length - 1].lasttime;
      var path = \'http://app.api.autohome.com.cn/autov5.0.0/news/newslist-pm1-c0-nt1-p\' + (page + 1) + \'-s30-l\' + lasttime + \'.json\';
      console.log(path);
      wx.showToast({
        title: \'加载更多\',
        icon: \'loading\',
        duration: 10000
      })
      var that = this;
      wx.request({
        url: path,
        data: {},
        method: \'GET\',
        success: function (res) {
          // 将本次下载的数据,添加到dataList
          that.setData({
            dataList: that.data.dataList.concat(res.data.result.newslist)
          });
          // 下载数据时,使用(page + 1),下载数据成功时,将page += 1,可以实现第n次上拉,加载第(n + 1)页。
          page += 1;
        },
        complete: function () {
          setTimeout(function () {
            wx.hideToast()
          }, 800)
        }
      })
      //模拟没有跟多了
    } else {
      wx.showToast({
        title: \'没有更多啦\',
        icon: \'loading\',
        duration: 1000
      })
    }
  }
})

      3、WXML文件

<block wx:for=\'{{dataList}}\'>
  <view class=\'cell\'>
    <image src="{{item.smallpic}}"></image>
    <view class=\'right-view\'>
      <text class=\'title\'>{{item.title}}</text>
      <view class=\'right-view-bottom\'>
        <text class=\'time\'>{{item.time}}</text>
        <text class=\'replycount\'>{{item.replycount}}评论</text>
      </view>
    </view>
  </view>
</block>

      4、WXSS文件

.cell {
  display: flex;
  padding: 20rpx;
  border-bottom: 1rpx solid lightgray;
}

image {
  width: 200rpx;
  height: 140rpx;
  margin-right: 20rpx;
}

.right-view {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}

.right-view-bottom {
  font-size: 30rpx;
}

.title {
  font-size: 38rpx;
}

.replycount {
  float: right;
}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap