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


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 相关文章推荐
JavaScript基础知识及常用方法总结
Jan 10 Javascript
提升jQuery的性能需要做好七件事
Jan 11 Javascript
深入剖析JavaScript面向对象编程
Jul 12 Javascript
利用JQuery直接调用asp.net后台的简单方法
Oct 27 Javascript
JS实现滑动门效果的方法详解
Dec 19 Javascript
JS中正则表达式全局匹配模式 /g用法详解
Apr 01 Javascript
jquery中为什么能用$操作
Jun 18 jQuery
vue把输入框的内容添加到页面的实例讲解
Nov 11 Javascript
JavaScript单线程和任务队列原理解析
Feb 04 Javascript
vue-router 控制路由权限的实现
Sep 24 Javascript
详解Vue中的自定义指令
Dec 07 Vue.js
Vue中避免滥用this去读取data中数据
Mar 02 Vue.js
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应用程序来获取Web服务器的状态信息
2006/10/09 PHP
php的ddos攻击解决方法
2015/01/08 PHP
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
如何使用jQuery+PHP+MySQL来实现一个在线测试项目
2015/04/26 PHP
php微信开发之谷歌测距
2018/06/14 PHP
jQuery右键菜单contextMenu使用实例
2011/09/28 Javascript
通过Javascript将数据导出到外部Excel文档的函数代码
2012/06/15 Javascript
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
jquery中trigger()无法触发hover事件的解决方法
2015/05/07 Javascript
Node.js的Express框架使用上手指南
2016/03/12 Javascript
nodejs使用redis作为缓存介质实现的封装缓存类示例
2018/02/07 NodeJs
layui 弹出删除确认界面的实例
2019/09/06 Javascript
vue过滤器实现日期格式化的案例分析
2020/07/02 Javascript
关于vue 结合原生js 解决echarts resize问题
2020/07/26 Javascript
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
Vue页面跳转传递参数及接收方式
2020/09/09 Javascript
python中list常用操作实例详解
2015/06/03 Python
python开发之list操作实例分析
2016/02/22 Python
浅谈python中的getattr函数 hasattr函数
2016/06/14 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
2017/12/25 Python
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
python多进程并行代码实例
2019/09/30 Python
Django实现网页分页功能
2019/10/31 Python
Python实现AI自动抠图实例解析
2020/03/05 Python
KIKO MILANO英国官网:意大利知名化妆品和护肤品品牌
2017/09/25 全球购物
澳大利亚当地社区首选的光学商店:1001 Optical
2019/08/24 全球购物
门诊手术室工作制度
2014/01/30 职场文书
《九寨沟》教学反思
2014/04/08 职场文书
植树节标语
2014/06/27 职场文书
乡镇八一建军节活动方案
2014/08/24 职场文书
护士节演讲稿开场白
2014/08/25 职场文书
工厂见习报告范文
2014/10/31 职场文书
信用卡工作证明范本
2015/06/19 职场文书
PL350与SW11的比较
2021/04/22 无线电
redis不能访问本机真实ip地址的解决方案
2021/07/07 Redis
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技