小程序的下拉刷新和触底追加内容 - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 小程序相关 >

小程序的下拉刷新和触底追加内容

发表时间:2021-1-5

发布人:葵宇科技

浏览次数:39

本方法是利用页面事件处理函数的 onPullDownRefreshonReachBottom 方法实现小程序的下拉刷新和触底追加内容。

前提条件:

需要在app.json的window选项中或页面配置中开启enablePullDownRefresh。

属性类型描述
enablePullDownRefreshBoolean是否开启下拉刷新,详见页面相关事件处理函数。
// 这里是index.json                           这里我选择在页面配置中开启,请添加以下语句 
{  "enablePullDownRefresh": true}
复制代码

了解2个函数:

方法类型描述
onPullDownRefresh()function页面相关事件处理函数——监听用户下拉动作
当处理完数据刷新后,wx.stopPullDownRefresh可以停止当前页面的下拉刷新
onReachBottom()function页面上拉触发底事件的处理函数
可以在app.json的window选项中或页面配置中设置触发距离onReachBottomDistance

让我们看看它到底是什么样子,相信你已经知道他们是如何触发的吧

理一下思路:

    要实现这个功能,先要知道在小程序开发中,页面中的内容是由数据驱动的,所以·····
复制代码

一、数据

  1. 你可以自己在Page({ 模拟数据 })

  2. 云开发=>数据库=>创建一个新的集合 =>添加记录=>爱添加什么键值对都可以

  3. 用接口去取得数据(这里先不具体说明)

    
    

二、页面

就像上面说的那样,数据驱动页面,让我们看看页面中的是什么样子的吧

// 这里是 index.wxml// 这里有些陌生的标签,不要紧,我只是引入了vant weapp而已,
// 你用任何你喜欢的html标签都可以实现
<van-cell-group>
  <block wx:for="{{tasks}}" wx:key="index">
    <navigator url="../todoInfo/todoInfo?id={{item._id}}">      
      <van-cell title="{{item.title}}" />    
    </navigator>  
  </block>
</van-cell-group>
复制代码
// 这里是 index.js

const db = wx.cloud.database()              // 创建一个database实例 
const todos = db.collection("todos")        // 取得数据库中名为 "todos" 的集合

Page({  
  /*页面的初始数据*/  
  data: {    
    tasks: [],    
    skip: 0  
  },
})
复制代码

复制代码 看到这里是不是有了疑问?

tasks是一个[ ] ,而它是空的,是如何变成下图中的样子?

skip 又是什么?

我们取得的todos,为什么还没有出现?它本质上它是一个对象 {} 只是这个花括号里有许多我们塞进去的key 和 value

记住他们,我将接着和你解释。

看 ! 并没有什么复杂的东西 只是通过 wx:for"{{tasks}}" 
循环遍历tasks并渲染到<van-cell  title="{{item.title}}"/ >而已。
它一条一条的出现在视图中了。
复制代码

如果你对Vue或者小程序有一些了解,那么你将看得懂这段代码在说一件什么事。

三、探究如何实现?

下拉刷新和触底追加内容

// 这里是index.js 
const db = wx.cloud.database()       // 创建一个database实例 
const todos = db.collection("todos") // 取得数据库中名为 "todos" 的集合

Page({
    /*页面的初始数据*/
  data: {                       // 一堆的代码对于任何人来说都感到头痛,所以跟着我注释看吧~
    tasks: [],
    skip: 0
  },
  /****页面相关事件处理函数--监听用户下拉动作****/
  onPullDownRefresh: function () {
    this.getData(res => {       // 这里只是调用了一个方法而已 接着注释往下看它是什么
      wx.stopPullDownRefresh()
      //将skip和tasks重置到初始状态。
      this.data.skip = 0
      this.data.tasks = []
    })
  },

  /****页面上拉触底事件的处理函数****/
  onReachBottom: function () {  // 这里只是调用了一个方法而已 接着注释往下看它是什么
    // 显示加载图标
    console.log("到底了")
    this.getData(res => {})
  },
  
  /***********************getData是我自定义的函数***********************/
  getData: function (callback) {
    if (!callback) {
      callback = res => {}
    }
    wx.showLoading({
      title: '正在努力加载···',
    })
    
  // 这里以下才是重要的部分// 注意todos我们之前已经得到它了
  
  // 下面这串代码告诉我们,取得todos中的数据,每次它都会跳过this.data.skip条,每次都将数据通过
  setData(),把tasks的值修改为 oldData和res.data拼接后的值。成功后将this.data.skip+20。
  // 随后你再看上面的代码 他们都是在触发条件的时候执行了getData而已,再顺带附加了进行了一
  些其他的操作

    todos.skip(this.data.skip).get().then(res => {
      // 用skip方法跳过已加载的部分 第一次跳过 0 条
      let oldData = http://www.wxapp-union.com/this.data.tasks
      this.setData({
        // 将跳过的数据 和 新加载 的拼接成新数据并渲染页面 
        tasks: oldData.concat(res.data)
      }, res => {
        // 每次加20 则上面的skip每次就跳过 前20条
        this.data.skip += 20
        wx.hideLoading({
          success: (res) => {},
        })
        callback()
      })
    })
  },
复制代码

起始渲染20条,是小程序约定的公共值

到底追加了12条,因为todos里一共只有32条


总结一下

  1. 就是通过skip()方法,跳过已加载过的数据,

  2. 每次触底都将已加载的数据和接下来要加载的数据进行拼接,并赋值给要渲染的data。

  3. 每次刷新再重置data并重新加载页面。


作者:raotao
链接:https://juejin.im/post/6880536175501803527
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关案例查看更多