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

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

小程序的顶部和底部都有默认的监听事件,这个组件的官方文档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`的处理
    
相关文章
|
13天前
|
小程序 前端开发 API
小程序全栈开发中的多端适配与响应式布局
【4月更文挑战第12天】本文探讨了小程序全栈开发中的多端适配与响应式布局。多端适配涉及平台和设备适应,确保统一用户体验;响应式布局利用媒体查询和弹性布局维持不同设备的布局一致性。实践中,开发者可借助跨平台框架实现多平台开发,运用响应式布局技术适应不同设备。同时,注意兼容性、性能优化和用户体验,以提升小程序质量和用户体验。通过这些方法,开发者能更好地掌握小程序全栈开发。
|
13天前
|
小程序 前端开发 API
微信小程序全栈开发中的异常处理与日志记录
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中的异常处理和日志记录,强调其对确保应用稳定性和用户体验的重要性。异常处理涵盖前端(网络、页面跳转、用户输入、逻辑异常)和后端(数据库、API、业务逻辑)方面;日志记录则关注关键操作和异常情况的追踪。实践中,前端可利用try-catch处理异常,后端借助日志框架记录异常,同时采用集中式日志管理工具提升分析效率。开发者应注意安全性、性能和团队协作,以优化异常处理与日志记录流程。
|
13天前
|
小程序 安全 数据安全/隐私保护
微信小程序全栈开发中的身份认证与授权机制
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中的身份认证与授权机制。身份认证包括手机号验证、微信登录和第三方登录,而授权机制涉及角色权限控制、ACL和OAuth 2.0。实践中,开发者可利用微信登录获取用户信息,集成第三方登录,以及实施角色和ACL进行权限控制。注意点包括安全性、用户体验和合规性,以保障小程序的安全运行和良好体验。通过这些方法,开发者能有效掌握小程序全栈开发技术。
|
13天前
|
小程序 前端开发 安全
小程序全栈开发中的跨域问题及其解决方案
【4月更文挑战第12天】本文探讨了小程序全栈开发中的跨域问题及其解决方案。跨域问题源于浏览器安全策略,主要体现在前后端分离、第三方服务集成和数据共享上。为解决此问题,开发者可采用CORS、JSONP、代理服务器、数据交换格式和域名策略等方法。实践中需注意安全性、兼容性和性能。通过掌握这些解决方案,开发者能更好地处理小程序的跨域问题,提升用户体验。
|
14天前
|
JavaScript 前端开发 小程序
微信小程序全栈开发之性能优化策略
【4月更文挑战第12天】本文探讨了微信小程序全栈开发的性能优化策略,包括前端的资源和渲染优化,如图片压缩、虚拟DOM、代码分割;后端的数据库和API优化,如索引创建、缓存使用、RESTful API设计;以及服务器的负载均衡和CDN加速。通过这些方法,开发者可提升小程序性能,优化用户体验,增强商业价值。
|
13天前
|
小程序 前端开发 JavaScript
微信小程序全栈开发中的PWA技术应用
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中PWA技术的应用,PWA结合Web的开放性和原生应用的性能,提供离线访问、后台运行、桌面图标和原生体验。开发者可利用Service Worker实现离线访问,Worker处理后台运行,Web App Manifest添加桌面图标,CSS和JavaScript提升原生体验。实践中需注意兼容性、性能优化和用户体验。PWA技术能提升小程序的性能和用户体验,助力开发者打造优质小程序。
|
2天前
|
数据采集 存储 人工智能
【Python+微信】【企业微信开发入坑指北】4. 企业微信接入GPT,只需一个URL,自动获取文章总结
【Python+微信】【企业微信开发入坑指北】4. 企业微信接入GPT,只需一个URL,自动获取文章总结
13 0
|
2天前
|
人工智能 机器人 API
【Python+微信】【企业微信开发入坑指北】3. 如何利用企业微信API给微信群推送消息
【Python+微信】【企业微信开发入坑指北】3. 如何利用企业微信API给微信群推送消息
6 0
|
2天前
|
缓存 人工智能 API
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
6 0
|
13天前
|
小程序 前端开发 API
小程序全栈开发中的RESTful API设计
【4月更文挑战第12天】本文探讨了小程序全栈开发中的RESTful API设计,旨在帮助开发者理解和掌握相关技术。RESTful API基于REST架构风格,利用HTTP协议进行数据交互,遵循URI、客户端-服务器架构、无状态通信、标准HTTP方法和资源表述等原则。在小程序开发中,通过资源建模、设计API接口、定义资源表述及实现接口,实现前后端高效分离,提升开发效率和代码质量。小程序前端利用微信API与后端交互,确保数据流通。掌握这些实践将优化小程序全栈开发。

热门文章

最新文章