微信小程序开发之上拉刷新

简介: 本节针对小程序上下拉刷新进行总结整理,小程序的内容刷新,简单来说就是针对页面顶部和底部的监听事件进行逻辑操作,接下来我们结合代码进行展开

小程序的顶部和底部都有默认的监听事件,这个组件的官方文档scroll-view,这个组件的属性如下:

scroll-view

可滚动视图区域

属性名 类型 默认值 说明
scroll-x Boolean false 允许横向滚动
scroll-y Boolean false 允许纵向滚动
upper-threshold Number 50 距顶部/左边多远时(单位px),触发 scrolltoupper 事件
lower-threshold Number 50 距底部/右边多远时(单位px),触发 scrolltolower 事件
scroll-top Number 设置竖向滚动条位置
scroll-left Number 设置横向滚动条位置
scroll-into-view String 值应为某子元素id(id不能以数字开头)。设置哪个方向可滚动,则在哪个方向滚动到该元素
scroll-with-animation Boolean false 在设置滚动条位置时使用动画过渡
enable-back-to-top Boolean false iOS点击顶部状态栏、安卓双击标题栏时,滚动条返回顶部,只支持竖向
bindscrolltoupper EventHandle 滚动到顶部/左边,会触发 scrolltoupper 事件
bindscrolltolower EventHandle 滚动到底部/右边,会触发 scrolltolower 事件
bindscroll EventHandle 滚动时触发,event.detail = {scrollLeft, scrollTop, scrollHeight, scrollWidth, deltaX, deltaY}

其中scroll-y,bindscrolltolower,bindscrolltoupper三个组件是分页需要用到的。

实现程序

  1. 我们需要在*.wxml中声明这个组件,组件内容加入需要展示的内容

    <!--
    - scroll-y="true" 为纵向滚动的必要声明
    - bindscrolltolower="loadMore" 为页面底部的监听事件,即上拉刷新事件
    - bindscrolltoupper="refresh" 为页面顶部的监听事件,即下拉刷新事件
    -->
    <scroll-view class="scroll-box" style="height:{{winHeight}}" scroll-y="true" bindscrolltolower="loadMore" bindscrolltoupper="refresh">
        <!--内容部分-->
        <view class="content">
          <view wx:for="{{content}}" wx:key="item">
           ……
          </view>
        </view>
    </scroll-view>
  2. 针对顶部和底部的监听事件进行业务处理

    //获取应用实例
    var app = getApp();
    Page({
      data: {
        userInfo: {},
        content: [],
        winHeight: 0
      },
      page: {//分页查询参数
        pageNum: 1,//初始页码
        pageSize: 10,//单页条数
        dataSize: 0,//总数据条数,初始为0
        hasRefresh: true //刷新状态
      },
      onLoad: function () {//页面初始加载事件
        var that = this;//复制this对象到临时变量
        wx.getSystemInfo({
          success: function (res) {
            that.setData({
              winHeight: res.windowHeight
            });
          }
        })
        loadData(that);
      },
    
      loadMore: function () {
        wx.showToast({
          title: '刷新中…',
          icon: 'loading',
          duration: 1000
        });
        var that = this;
        loadData(that);
      },
      refresh: function () {
        console.log("下拉刷新....")
        this.onLoad();
      }
    })
    //数据加载
    var loadData = function (that) {
      var pageCount = 1;
      if (that.page.dataSize > 0 && that.page.dataSize % that.page.pageSize == 0) {
        pageCount = parseInt(that.page.dataSize / that.page.pageSize);
      } else {
        pageCount = parseInt(that.page.dataSize / that.page.pageSize) + 1;
      }
      if (!that.page.hasRefresh) {
        return;
      }
      that.page.hasRefresh = false;//阻塞标识符,防止本次处理未结束前出现重复请求
      var limit_start = that.page.pageSize * (that.page.pageNum - 1);
      var limit_end = that.page.pageSize * that.page.pageNum;
      if (that.page.pageNum > pageCount) {
        return;
      }
      wx.request({
        url: 'https://*****/goods/list',
        data: {
          limit_start: limit_start,
          limit_end: limit_end
        },
        method: 'GET',
        header: {
          'content-type': 'application/json'
        },
        success: function (res) {
          that.setData({
            content: that.data.content.concat(res.data.list)
          });
          that.page.dataSize = limit_start == 0 ? res.data.dataSize : that.page.dataSize;
          that.page.pageNum++;
          that.page.hasRefresh = true;//释放阻塞
        }
      })
    }

注意事项

  1. 分页数据拼装到一页进行显示时,需要将每次请求的结果集进行合并处理,参考上文中

    success: function (res) {
      that.setData({
        'content: that.data.content.concat(res.data.list)'
      });
    }
  2. scroll-view标签设置了bindscrolltolower,实现上拉加载时,数据重复请求

    小程序的请求处理需要一定时间,而实际使用中,在请求结束前经常发生多次触发底部监听事件的情况,小程序组件中并为对此做处理,需要我们额外增加标识位来阻塞重复请求,参考样例代码中`hasRefresh`的处理
    
相关文章
|
5天前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
78 7
|
4天前
|
人工智能 小程序
一步步开发AI运动小程序】二、引入插件
随着人工智能技术的发展,阿里体育等公司推出的“乐动力”、“天天跳绳”等AI运动APP广受欢迎。本文将引导您从零开始开发一个AI运动小程序,使用“云智AI运动识别小程序插件”。内容包括新建uni-app项目、配置插件、部署模型、安装依赖包、全局初始化和调用插件对象。
|
3天前
|
小程序 搜索推荐 数据挖掘
跳绳打卡小程序开发多钱费用
跳绳打卡小程序通过智能手机即可轻松使用,无需额外设备,只需一根跳绳即可开始您的健康之旅。它结合了便捷性、互动性和个性化设置,让跳绳这项运动变得更加有趣和高效
|
5天前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
59 1
|
1天前
|
存储 传感器 小程序
跳绳计数小程序开发系统
首先,我们需要明确跳绳计数小程序的核心功能:为用户提供跳绳计数的便捷方式。这意味着小程序需要能够准确地记录用户的跳绳次数,并为用户提供清晰、直观的计数展示。
|
1天前
|
人工智能 编解码 小程序
【一步步开发AI运动小程序】四、小程序如何抽帧
随着AI技术的发展,阿里体育等公司推出的“乐动力”、“天天跳绳”等APP使云上运动会、线上健身等概念备受关注。本文将引导您从零开始开发一个AI运动小程序,利用“云智AI运动识别小程序插件”。文中详细介绍了微信小程序抽帧的相关API、设置及注意事项,帮助开发者更好地实现AI运动功能。下篇将介绍人体识别技术,敬请期待。
|
2天前
|
传感器 存储 小程序
跳绳计数小程序开发
跳绳计数小程序旨在通过智能设备(如手机或智能手表)记录用户在跳绳过程中的次数、时间、速度等关键数据,为用户提供便捷的运动记录和数据分析服务
|
1天前
|
小程序 搜索推荐 前端开发
小剧场短剧影视小程序开发
小剧场短剧影视小程序旨在为用户提供一个便捷、互动的平台,让用户能够随时随地观看、分享和评论各类小剧场短剧。通过小程序,用户可以浏览热门短剧、搜索感兴趣的内容、参与社区互动,以及享受个性化的推荐服务。
|
2天前
|
小程序 搜索推荐 前端开发
短剧小程序开发案例
首先,明确你的短剧平台的目标用户群体和他们的需求。比如,年轻用户可能更倾向于轻松、幽默的短剧内容,而家庭用户则可能更偏爱教育、亲子类的短剧。了解用户需求有助于你设计更符合他们口味的功能和界面
|
2天前
|
机器学习/深度学习 人工智能 小程序
【一步步开发AI运动小程序】三、运动识别处理流程
随着人工智能技术的发展,阿里体育等公司推出的“乐动力”、“天天跳绳”等AI运动APP备受关注。本文将引导您从零开始开发一个AI运动小程序,使用“云智AI运动识别小程序插件”。文章介绍了视频帧、帧率FPS、抽帧和人体识别等基本概念,并详细说明了处理流程,包括抽帧、人体识别检测、骨骼图绘制和运动分析等步骤。下篇将介绍如何在小程序中实现抽帧。