程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 原生微信小程序

  • uniapp多端开发

    • 快速入门

      • 环境搭建和介绍
      • 全局配置文件(pages.json)
      • 创建新页面和页面路由跳转
      • 配置底部导航栏(tabBar)
      • 文本和图标组件
      • uni-row 快速布局
      • 页面样式设计
      • 下拉刷新和上拉加载
        • 一、下拉刷新
          • 1.1 常见实现方式
          • 1.2 页面级配置
          • 1.3 监听下拉刷新事件
          • 1.4 停止下拉刷新
        • 二、上拉加载
          • 2.1 监听页面触底事件
          • 2.2 触底距离
          • 2.3 加载更多示例
      • 发送网络请求
      • 数据的缓存
      • 图片的上传
    • 内置组件

    • 扩展组件

  • 小程序开发
  • uniapp多端开发
  • 快速入门
scholar
2025-01-28
目录

下拉刷新和上拉加载

# 一、下拉刷新

在移动端应用中,“下拉刷新”是非常常见的交互方式:用户手指向下拉动列表(或页面)时会触发刷新事件,然后去更新数据或刷新视图。

# 1.1 常见实现方式

在 uni-app 中,开启下拉刷新可以通过全局或页面级进行配置:

  1. 全局配置:在 pages.json 中统一开启所有页面的下拉刷新。
  2. 页面级配置:在页面的 style 配置里(依然写在 pages.json 中,或者通过页面的 onPullDownRefresh 事件)进行单独控制,只对需要的页面生效。

不推荐使用全局配置的原因是:如果每个页面都开启下拉刷新,就会增加不必要的性能消耗。按需开启才是最佳实践。

# 1.2 页面级配置

可以在 pages.json 中单独指定某个页面开启下拉刷新(通过 enablePullDownRefresh: true),示例:

{
  "pages": [
    {
      "path": "pages/index/index",
      "style": {
        "enablePullDownRefresh": true
      }
    }
  ]
}
1
2
3
4
5
6
7
8
9
10

这样只对 pages/index/index 页面启用下拉刷新功能,其他页面则保持默认。

# 1.3 监听下拉刷新事件

在页面的脚本部分(如 pages/index/index.vue),uni-app 提供了一个生命周期方法 onPullDownRefresh。当用户下拉页面时会自动触发这个方法,你可以在这里执行相应的刷新逻辑,如请求数据、重置列表等。

具体写法示例(以 Vue 方式为例):

<script>
export default {
  onPullDownRefresh() {
    // 例如,请求最新数据
    setTimeout(() => {
      // 请求完成后,停止下拉刷新
      uni.stopPullDownRefresh();
    }, 2000);
  }
};
</script>
1
2
3
4
5
6
7
8
9
10
11
  1. onPullDownRefresh:触发时机是在用户手指下拉动作达到一定阈值后。
  2. uni.stopPullDownRefresh():停止当前的下拉刷新动画,一定要在数据加载完成后调用,否则界面的“刷新中”提示不会消失。

# 1.4 停止下拉刷新

当你的刷新操作(如网络请求)结束后,需要调用 uni.stopPullDownRefresh() 来关闭刷新动画。否则用户界面会一直处于刷新状态。下图展示了此函数的调用方法:

一旦刷新完成之后,我们就可以通过uni.stopPullDownRefresh();关闭

img

# 二、上拉加载

在列表数据较多时,为了让用户能够分批浏览并减少首屏加载量,常常会在页面滚动到底部时触发“加载更多”事件,将后续数据懒加载进来,这个过程就是“上拉加载”。

# 2.1 监听页面触底事件

uni-app 提供了 onReachBottom 生命周期方法,当页面(或列表)滚动到底部时,就会触发这个方法。在实际项目中,你可以在该方法里执行 “请求下一页数据” 或 “更新列表” 等操作。

# 2.2 触底距离

在很多情况下,你不希望完全滚动到底部时才触发加载,而是提前在页面接近底部时就发起请求。uni-app 为我们提供了一个配置项:onReachBottomDistance(又称“触底距离”),默认值大约是50px(不同小程序平台默认值可能略有差异)。

可以在 pages.json 或页面配置中修改此属性,让它在距离底部一定距离时就触发 onReachBottom 回调:







 





{
  "pages": [
    {
      "path": "pages/index/index",
      "style": {
        "enablePullDownRefresh": false,
        "onReachBottomDistance": 100
      }
    }
  ]
}
1
2
3
4
5
6
7
8
9
10
11

# 2.3 加载更多示例

在 onReachBottom 方法中,我们可以发起网络请求或进行数据拼接。例如:













 

















<script>
export default {
  data() {
    return {
      pageNum: 1,
      itemList: []
    };
  },
  onLoad() {
    // 首次加载或其他初始化逻辑
    this.loadData();
  },
  onReachBottom() {
    // 到底部时,加载下一页数据
    this.pageNum++;
    this.loadData();
  },
  methods: {
    loadData() {
      // 此处可替换为实际的请求接口
      const moreData = [
        /* 模拟数据,这里可请求后台API */
      ];
      // 将新数据拼接到已有列表中
      this.itemList = [...this.itemList, ...moreData];
    }
  }
};
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

img

编辑此页 (opens new window)
上次更新: 2025/02/01, 02:18:15
页面样式设计
发送网络请求

← 页面样式设计 发送网络请求→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式