微信小程序分页加载的实例代码


Posted in Javascript onJuly 11, 2017

整理文档,搜刮出一个微信小程序分页加载的代码,稍微整理精简一下做下分享。

分页加载功能大家遇到的应该会经常遇到,应用场景也很多,例如微博,QQ,微信朋友圈以及新闻类应用,都会有分页加载的功能,这不仅节省了我们用户的流量,还提升了用户体验。那么今天的这篇文章就是介绍微信小程序中如何实现分页加载的功能。照例先上源码及效果图。

源码传送门

微信小程序分页加载的实例代码

要实现这样的功能,一般需要在请求数据时加入当前请求页数,以及页的大小(每页显示的数量)也有一部分接口是通过请求的开始偏移量和结束偏移量请求数据,例如你一页显示10条数据,第一次(第一页)请求即开始start为0结束end是9,第二页就是从10到19,以此类推。

既然要实现分页加载功能,最重要就是下拉以及上拉的处理事件,在微信小程序中已经帮我们封装好了上拉以及下拉的触发事件,如下

/**
 * 页面相关事件处理函数--监听用户下拉动作
 */
 onPullDownRefresh: function () {
 },

 /**
  * 页面上拉触底事件的处理函数
  */
 onReachBottom: function () {
 },

可能刚接触微信小程序的爱好者,会遇到一个问题,为什么我重写了上拉和下拉函数,但是当我上拉或者下拉的时候函数为什么不回调啊。莫急莫慌,那是因为除了重写这两个函数,我们还需要在json配置文件加入下面代码

{
  "enablePullDownRefresh": true
}

有了上面的代码,我们每次上拉或者下拉就会触发相对应的函数了。

在data中创建数据

data: {
  page: 1,
  pageSize: 30,
  hasMoreData: true,
  contentlist: [],
 },

page即为当前请求数据时第几页,pageSize是每页的数据的大小,hasMoreData用于上拉的时候是不是要继续请求数据,即是不是还有更多数据。当我们网络请求数据成功后,如果请求数据的长度小于pageSize: 30,那么就表示没有更多数据,将hasMoreData更改为false,如果请求的数据长度是30,表示还有更多数据那么hasMoreData久更改为true,并将页数page加1.当下拉的时候讲page先更改为1,然后去查询数据,当查询数据成功时,如果page为1,就将获取的数据直接赋值给contentlist,如果页数大于1的话,就将请求的数据追加在contentlist后面。这样就可以实现分页加载的功能了。

经过上面的分析,我们已经对分页加载的实现有了一个清晰的认识,那么接下来我就介绍代码的实现。

getMusicInfo: function (message) {
  var that = this
  var data = {
   showapi_appid: '25158',
   showapi_sign: 'c0d685445898438f8c12ee8e93c2ee74',
   keyword: '我',
   page: that.data.page
  }
  network.requestLoading('https://route.showapi.com/213-1', data, message, function (res) {
   console.log(res)
   var contentlistTem = that.data.contentlist
   if (res.showapi_res_code == 0) {
    if (that.data.page == 1) {
     contentlistTem = []
    }
    var contentlist = res.showapi_res_body.pagebean.contentlist
    if (contentlist.length < that.data.pageSize) {
     that.setData({
      contentlist: contentlistTem.concat(contentlist),
      hasMoreData: false
     })
    } else {
     that.setData({
      contentlist: contentlistTem.concat(contentlist),
      hasMoreData: true,
      page: that.data.page + 1
     })
    }
   } else {
    wx.showToast({
     title: res.showapi_res_error,
    })
   }

  }, function (res) {
   wx.showToast({
    title: '加载数据失败',
   })

  })
 },

上面函数就是获取音乐列表信息的请求处理逻辑,该函数有一个参数message,它是用来展示加载数据时的提示信息,例如当下拉的时候,提示信息为正在刷新数据,当上拉的时候提示正在加载更多数据。

那么我们当进入页面的时候开始加载一次数据,即在onLoad函数,如下

onLoad: function (options) {
  // 页面初始化 options为页面跳转所带来的参数
  var that = this
  that.getMusicInfo('正在加载数据...')
 },

然后上拉和下拉函数的实现如下

/**
 * 页面相关事件处理函数--监听用户下拉动作
 */
 onPullDownRefresh: function () {
  this.data.page = 1
  this.getMusicInfo('正在刷新数据')
 },

 /**
  * 页面上拉触底事件的处理函数
  */
 onReachBottom: function () {
  if (this.data.hasMoreData) {
   this.getMusicInfo('加载更多数据')
  } else {
   wx.showToast({
    title: '没有更多数据',
   })
  }
 },

  以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
轻量级 JS ToolTip提示效果
Jul 20 Javascript
JS正则验证邮箱的格式详细介绍
Nov 19 Javascript
基于javascript实现全国省市二级联动下拉选择菜单
Jan 28 Javascript
jQuery实现带水平滑杆的焦点图动画插件
Mar 08 Javascript
JavaScript里 ==与===区别详解
Aug 16 Javascript
Vue实现动态响应数据变化
Apr 28 Javascript
vue2.0中click点击当前li实现动态切换class
Jun 21 Javascript
React学习笔记之列表渲染示例详解
Aug 22 Javascript
vue项目强制清除页面缓存的例子
Nov 06 Javascript
Element-UI+Vue模式使用总结
Jan 02 Javascript
vue:el-input输入时限制输入的类型操作
Aug 05 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
Dec 01 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
Jul 11 #Javascript
React入门教程之Hello World以及环境搭建详解
Jul 11 #Javascript
underscore之function_动力节点Java学院整理
Jul 11 #Javascript
ReactNative实现图片上传功能的示例代码
Jul 11 #Javascript
手把手教你搭建ES6的开发运行环境
Jul 11 #Javascript
ReactNative之键盘Keyboard的弹出与消失示例
Jul 11 #Javascript
react-native 封装选择弹出框示例(试用ios&amp;android)
Jul 11 #Javascript
You might like
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
Yii输入正确验证码却验证失败的解决方法
2017/06/06 PHP
js 获取和设置css3 属性值的实现方法
2013/05/06 Javascript
jquery鼠标停止移动事件
2013/12/21 Javascript
jQuery实现带滚动导航效果的全屏滚动相册实例
2015/06/19 Javascript
javascript日期计算实例分析
2015/06/29 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
2017/01/09 Javascript
详谈js中数组(array)和对象(object)的区别
2017/02/27 Javascript
Angular学习笔记之集成三方UI框架、控件的示例
2018/03/23 Javascript
Vue页面骨架屏注入方法
2018/05/13 Javascript
在vue中解决提示警告 for循环报错的方法
2018/09/28 Javascript
JavaScript类的继承操作实例总结
2018/12/20 Javascript
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
2020/05/11 Javascript
[01:00:35]2018DOTA2亚洲邀请赛3月30日B组 EffcetVSMineski
2018/03/31 DOTA
Python os模块介绍
2014/11/30 Python
Python实现模拟登录及表单提交的方法
2015/07/25 Python
Python中str is not callable问题详解及解决办法
2017/02/10 Python
Python 专题一 函数的基础知识
2017/03/16 Python
python中子类调用父类函数的方法示例
2017/08/18 Python
python实现二叉树的遍历
2017/12/11 Python
如何用Python实现简单的Markdown转换器
2018/07/16 Python
python rsync服务器之间文件夹同步脚本
2019/08/29 Python
Linux下通过python获取本机ip方法示例
2019/09/06 Python
使用Python实现将多表分批次从数据库导出到Excel
2020/05/15 Python
python入门:argparse浅析 nargs='+'作用
2020/07/12 Python
如何使用Python调整图像大小
2020/09/26 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
2021/02/06 Python
python 求两个向量的顺时针夹角操作
2021/03/04 Python
HTML5 图片悬停放大的实现代码示例
2019/12/04 HTML / CSS
联想美国官方商城:Lenovo美国
2017/06/19 全球购物
波兰在线运动商店:YesSport
2020/07/23 全球购物
初中考试作弊检讨书
2014/02/01 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
在python中实现导入一个需要传参的模块
2021/05/12 Python
详解Python类和对象内容
2021/06/22 Python