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

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

小程序的顶部和底部都有默认的监听事件,这个组件的官方文档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`的处理
    
相关文章
预约按摩小程序开发,为什么很多上门按摩平台根本招聘不到优秀技师?
上门按摩平台面临招不到优秀技师的问题,主要原因是平台众多,技师选择多样。为解决此问题,平台可引入技师等级制度,根据订单数量和好评率划分高、低等级技师。高等级技师可享受70%-90%的高提成及首页推荐,这不仅能激励技师的积极性,还能帮助平台筛选出优质技师,提升服务质量和口碑,形成良性循环。
|
1月前
|
人工智能 小程序
【一步步开发AI运动小程序】十五、AI运动识别中,如何判断人体站位的远近?
【云智AI运动识别小程序插件】提供人体、运动及姿态检测的AI能力,无需后台支持,具有快速、体验好、易集成等特点。本文介绍如何利用插件判断人体与摄像头的远近,确保人体图像在帧内的比例适中,以优化识别效果。通过`whole`检测规则,分别实现人体过近和过远的判断,并给出相应示例代码。
|
1天前
|
小程序 前端开发 关系型数据库
uniapp跨平台框架,陪玩系统并发性能测试,小程序源码搭建开发解析
多功能一体游戏陪练、语音陪玩系统的开发涉及前期准备、技术选型、系统设计与开发及测试优化。首先,通过目标用户分析和竞品分析明确功能需求,如注册登录、预约匹配、实时语音等。技术选型上,前端采用Uni-app支持多端开发,后端选用PHP框架确保稳定性能,数据库使用MySQL保证数据一致性。系统设计阶段注重UI/UX设计和前后端开发,集成WebSocket实现语音聊天。最后,通过功能、性能和用户体验测试,确保系统的稳定性和用户满意度。
|
7天前
|
小程序 IDE PHP
圈子源码如何打包生成App小程序/开发一个圈子系统软件所需要的费用体现在哪里?
将PHP源码打包成App的过程涉及多个步骤和技术选择。以圈子源码为例,首先明确需求,确定App功能和目标用户群体,并根据需求开发小程序页面,如用户注册、圈子列表等。源码准备阶段确保源码适用于小程序开发,环境配置需安装IDE(如微信开发者工具)及依赖库。最后在IDE中打包小程序并上传至管理平台,通过审核后发布。费用方面,模板开发成本较低,定制开发则更高,具体取决于需求复杂度和第三方服务费用。
42 0
|
25天前
|
开发框架 小程序 前端开发
圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
本文介绍了圈子社交APP的源码获取、分析与定制,PHP实现的圈子框架设计及代码编写,以及圈子小程序的安装搭建。涵盖环境配置、数据库设计、前后端开发与接口对接等内容,确保平台的安全性、性能和功能完整性。通过详细指导,帮助开发者快速搭建稳定可靠的圈子社交平台。
|
5天前
|
移动开发 小程序
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
thinkphp+uniapp开发的多端商城系统源码/H5/小程序/APP支持DIY模板直播分销
12 0
|
1月前
|
人工智能 小程序 UED
【一步步开发AI运动小程序】十六、AI运动识别中,如何判断人体站位?
【云智AI运动识别小程序插件】提供人体、运动及姿态检测的AI能力,本地引擎无需后台支持,具备快速、体验好、易集成等优势。本文介绍如何利用插件的`camera-view`功能,通过检测人体站位视角(前、后、左、右),确保运动时的最佳识别率和用户体验。代码示例展示了如何实现视角检查,确保用户正或背对摄像头,为后续运动检测打下基础。
|
1月前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十七、如何识别用户上传视频中的人体、运动、动作、姿态?
【云智AI运动识别小程序插件】提供人体、运动、姿态检测的AI能力,支持本地原生识别,无需后台服务,具有速度快、体验好、易集成等优点。本文介绍如何使用该插件实现用户上传视频的运动识别,包括视频解码抽帧和人体识别的实现方法。
|
2月前
|
人工智能 小程序 IDE
【一步步开发AI运动小程序】九、姿态辅助调试桌面工具的使用
随着AI技术的发展,各大厂商推出的AI运动APP如“乐动力”、“天天跳绳”等,使云上运动会、线上健身等概念大热。本文将指导你如何利用“云智AI运动识别小程序插件”,在微信小程序中实现类似功能,包括工具搭建、服务启动及数据回传等步骤,助力开发者高效开发AI运动小程序。
【一步步开发AI运动小程序】九、姿态辅助调试桌面工具的使用
|
1月前
|
人工智能 小程序 API
【一步步开发AI运动小程序】十三、自定义一个运动分析器,实现计时计数02
本文介绍如何利用“云智AI运动识别小程序插件”开发AI运动小程序,详细解析了俯卧撑动作的检测规则构建与执行流程,涵盖卧撑和撑卧两个姿态的识别规则,以及如何通过继承`sports.SportBase`类实现运动分析器,适用于小程序开发者。

热门文章

最新文章