小程序触底加载与下拉刷新功能的设计与实现

简介: 在最近做小程序的时候有这么一个很常见的需求,加载一个信息列表,要求需要触底加载和下拉刷新,我突然想起来掘金小册界面和这个需求很相似,接下来我给大家介绍一下我的实现方案。

微信小程序实现触底加载与下拉刷新

在最近做小程序的时候有这么一个很常见的需求,加载一个信息列表,要求需要触底加载和下拉刷新,我突然想起来掘金小册界面和这个需求很相似,接下来我给大家介绍一下我的实现方案。

image.png

触底加载

步骤如下:

  1. 封装一个loader函数
  2. 在监听页面加载的时候触发这个loader函数
  3. 在监听到触底的时候再次触发这个函数
onLoad: function (options) {
    this.loadBooks(this.data.books.length)
},
onReachBottom: function () {
    this.loadBooks(this.data.books.length)
},
loadBooks: function () {
},
复制代码

注意这里的生命周期函数:onload为监听页面加载生命周期,onReachBottom为监听触底动作生命周期。

loader函数思考

loader函数的封装首先取决与我们的业务逻辑,首先根据我们的业务来思考,

我们想要通过触底来获取数据,所以我们需要固定住我们每次获取数据的数量,其次,为了避免重复,我们不能重复获取,就要考虑从为获取的数据项开始获取,下面实现过程中的skip(n)是必要的,即传进来的参数为从第n项开始,我们在监听和触底传参都为当下数组的长度,因为当页面刚加载的时候数组长度为0,当触底的时候,数组长度恰为当前已经获取的数据项,所以之后就可以获取未获得的数据并于之前的数组合并。

loader函数实现

其实loader函数的实现才是触底加载功能的核心,正常情况下触底加载的逻辑是通过触底累加一个数字代表页码数,然后将页码数发送给服务端,服务端再将信息数组返回,我使用的是云开发,所以解决方案有所不同。

  • 调用wx云开发的api,skip(n)从集合的第n项开始获取 limit(n)获取至多n个元素。
  • 通过get获取相应数据,这里为n项后6个数据。
  • 通过cancat()实现数组的合并 需要注意的是这里的limit(n)直接使用是有20的长度限制,如果有刚需,需要获取20个以上的数据集合,那么我们可以在云函数中去解决。
loadBooks: function (n) {
        wx.cloud.database().collection('books').skip(n).limit(6).get().then(res => {
            console.log(res.data)
            this.setData({
                books: this.data.books.concat(res.data)
            })
        })
    },
复制代码

触底加载动画

关于触底加载动画,我是在codepen参考的,只需要在触底的时候,将控制动画元素的变量更改,在数据获取成功的时候再改变即可,加载动画代码如下。

<view class="loader" wx:if="{{isLoader}}">
    <view class="dot"></view>
    <view class="dot"></view>
    <view class="dot"></view>
    <view class="dot"></view>
    <view class="dot"></view>
</view>
复制代码
.dot {
    width: 24rpx;
    height: 24rpx;
    background: #3ac;
    border-radius: 100%;
    display: inline-block;
    animation: slide 1s infinite;
}
.dot:nth-child(n) {
    animation-delay: 0.1s;
    background: #6cd793;
}
@keyframes slide {
    0% {
        transform: scale(1);
    }
    50% {
        opacity: .3;
        transform: scale(2);
    }
    100% {
        transform: scale(1);
    }
}
复制代码

触底加载的优点

在小程序中如果数据量过大,一次性获取会加重dom渲染的负担,不仅如此,响应的速度也会如龟速一样,所以为了用户的体验,良好的响应式交互是必要的,通过触底交互,按量加载数据,如下,我每次触底会加载八份数据,然后直到所有数据加载完毕,为空。

77749ae973d14534bf73cc33e6a92d4a_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

下拉刷新

小程序下拉刷新页面实现还是很容易的

  1. 在相应页面的同级json文件中配置一下enablePullDownRefresh使其为true,这里是开启对应页面的下拉刷新设置
{
  "usingComponents": {},
  "enablePullDownRefresh": true,
}
复制代码
  1. 使用onPullDownRefresh监听用户下拉动作
onPullDownRefresh: function () {},
复制代码
  1. 调用wx的加载api
onPullDownRefresh: function () {
        console.log(1)
        //在标题栏中显示加载
        wx.showNavigationBarLoading() 
        wx.showLoading({
            title: '刷新中...',
        })
        wx.cloud.database().collection('books').skip(0).limit(6).get().then(res => {
            this.setData({
                books: res.data
            })
            wx.hideLoading();
            //隐藏导航条加载动画
            wx.hideNavigationBarLoading();
            //停止下拉刷新
            wx.stopPullDownRefresh();
        })
    },
复制代码
  1. 具体api相关介绍如下:
  • wx.showNavigationBarLoading()在导航条进行显示加载动画
  • wx.hideNavigationBarLoading()隐藏导航条加载动画
  • wx.stopPullDownRefresh()停止下拉刷新

最后

掘友大佬们有更好的想法在评论区留言,我会完善我的xxx山


相关文章
|
14天前
|
移动开发 小程序 前端开发
几千怎么部署搭建校园服务平台,校园圈子论坛系统小程序搭建,校园系统源码,多种功能一体的综合性校园平台
校园圈子论坛是一款集交友、二手市场、聊天等多功能于一体的校园社交平台,支持App、小程序和H5三端交付。学生可处理闲置物品、结识新朋友,通过算法匹配兴趣相投的用户。平台提供分享邀请机制,支持自动绑定推荐关系,并设有奖励机制。开发过程中需注重数据安全与系统稳定性,确保功能兼容及性能优化。
56 5
|
14天前
|
移动开发 小程序 前端开发
使用php开发圈子系统特点,如何获取圈子系统源码,社交圈子运营以及圈子系统的功能特点,圈子系统,允许二开,免费源码,APP 小程序 H5
开发一个圈子系统(也称为社交网络或社群系统)可以是一个复杂但非常有趣的项目。以下是一些关键特点和步骤,帮助你理解如何开发、获取源码以及运营一个圈子系统。
87 3
|
18天前
|
小程序 安全 搜索推荐
陪玩小程序的搭建解析与功能需求
陪玩小程序是为玩家提供专业陪玩服务的应用,嵌入社交或游戏平台,具备智能匹配、实时聊天、预约服务等功能,支持便捷高效的游戏体验。源码交付时需提供详细文档、技术支持及定制开发服务,确保客户能顺利维护和升级。选择陪玩小程序时应关注功能需求、用户体验、安全性和成本效益,以确保最佳使用效果。
37 0
|
14天前
|
小程序 安全 网络安全
清晰易懂!陪玩系统源码搭建的核心功能,陪玩小程序、陪玩app的搭建步骤!
陪玩系统源码包含多种约单方式、实时语音互动、直播间与聊天室、大神申请与抢单、动态互动与社交及在线支付与评价等核心功能。搭建步骤包括环境准备、源码上传与解压、数据库配置、域名与SSL证书绑定、伪静态配置及后台管理。注意事项涵盖源码安全性、二次开发、合规性和技术支持。确保平台安全、合规并提供良好用户体验是关键。
|
2月前
|
小程序 数据挖掘 UED
开发1个上门家政小程序APP系统,都有哪些功能?
在快节奏的现代生活中,家政服务已成为许多家庭的必需品。针对传统家政服务存在的问题,如服务质量不稳定、价格不透明等,我们历时两年开发了一套全新的上门家政系统。该系统通过完善信用体系、提供奖励机制、优化复购体验、多渠道推广和多样化盈利模式,解决了私单、复购、推广和盈利四大痛点,全面提升了服务质量和用户体验,旨在成为家政行业的领导者。
|
3月前
|
存储 自然语言处理 小程序
微信小程序多语言切换神器:简繁体切换功能完全指南
随着全球化的发展,支持多种语言的应用程序愈发重要。本文介绍了如何在微信小程序中实现简体与繁体字体之间的切换功能,以满足不同地区用户的需求。通过创建utils文件夹并编写相应的转换函数,开发者可以方便地实现语言切换,从而提升用户体验。文章中还附带了示例代码和效果图,帮助读者更好地理解和应用这一功能。
127 0
微信小程序多语言切换神器:简繁体切换功能完全指南
|
3月前
|
缓存 小程序 UED
如何利用小程序的生命周期函数实现数据的加载和更新?
如何利用小程序的生命周期函数实现数据的加载和更新?
101 4
|
3月前
|
小程序 Linux Python
查找首字母与Python相关的的英文词汇小程序的续篇---进一步功能完善
查找首字母与Python相关的的英文词汇小程序的续篇---进一步功能完善
31 1
|
3月前
|
小程序
uni-app开发微信小程序使用onPullDownRefresh(下拉刷新)总结
uni-app开发微信小程序使用onPullDownRefresh(下拉刷新)总结
726 0
|
4月前
|
JSON 小程序 JavaScript
微信小程序页面事件,下拉刷新事件和上拉触底事件
这篇文章介绍了微信小程序中如何实现下拉刷新和上拉触底事件,包括开启下拉刷新、配置下拉刷新样式、监听下拉刷新事件,以及监听上拉触底事件和配置上拉触底的距离。

热门文章

最新文章