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


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 相关文章推荐
将HTML自动转为JS代码
Jun 26 Javascript
在Javascript中定义对象类别
Dec 22 Javascript
我也种棵OO树JXTree[js+css+xml]
Apr 02 Javascript
JavaScript 新手24条实用建议[TUTS+]
Jun 21 Javascript
JS 添加网页桌面快捷方式的代码详细整理
Dec 27 Javascript
json传值以及ajax接收详解
May 24 Javascript
Bootstrap实现水平排列的表单
Jul 04 Javascript
用file标签实现多图文件上传预览
Feb 14 Javascript
es6+angular1.X+webpack 实现按路由功能打包项目的示例
Aug 16 Javascript
解决eclipse中没有js代码提示的问题
Oct 10 Javascript
React传值 组件传值 之间的关系详解
Aug 26 Javascript
微信小程序如何通过用户授权获取手机号(getPhoneNumber)
Jan 21 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 5.0创建图形的巧妙方法
2010/10/12 PHP
php网站判断用户是否是手机访问的方法
2013/11/01 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
JavaScript高级程序设计
2006/12/29 Javascript
js中的escape及unescape函数的php实现代码
2007/09/04 Javascript
js获取图片长和宽度的代码
2009/11/24 Javascript
jquery 应用代码 方便的排序功能
2010/02/06 Javascript
JavaScript中使用replace结合正则实现replaceAll的效果
2010/06/04 Javascript
基本jquery的控制tabs打开的数量的代码
2010/10/17 Javascript
事件绑定之小测试  onclick &amp;&amp; addEventListener
2011/07/31 Javascript
JS 作用域与作用域链详解
2015/04/07 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
2016/04/29 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
AngularJS过滤器filter用法分析
2016/12/11 Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
2017/07/17 Javascript
VUE基于NUXT的SSR 服务端渲染
2018/11/30 Javascript
详解小程序退出页面时清除定时器
2019/04/28 Javascript
Angular中innerHTML标签的样式不起作用的原因解析
2019/06/18 Javascript
详解element-ui中表单验证的三种方式
2019/09/18 Javascript
Python中用函数作为返回值和实现闭包的教程
2015/04/27 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
2018/11/07 Python
Python在图片中插入大量文字并且自动换行
2019/01/02 Python
基于Python实现大文件分割和命名脚本过程解析
2019/09/29 Python
PageFactory设计模式基于python实现
2020/04/14 Python
Python绘制词云图之可视化神器pyecharts的方法
2021/02/23 Python
美国女性卫生用品公司:Thinx
2017/06/30 全球购物
新闻专业个人求职信
2013/12/19 职场文书
高中毕业自我评价
2014/02/08 职场文书
厨房领班竞聘演讲稿
2014/04/23 职场文书
销售员试用期自我评价
2014/09/15 职场文书
法院干警四风问题自我剖析材料
2014/09/29 职场文书
2015年班长个人工作总结
2015/04/03 职场文书
把77A收信机改造成收音机
2022/04/05 无线电
利用Python实现模拟登录知乎
2022/05/25 Python
Android开发EditText禁止输入监听及InputFilter字符过滤
2022/06/10 Java/Android