程序员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多端开发

    • 快速入门

    • 内置组件

      • 视图容器

      • 基础内容

      • 表单组件

      • 路由页面跳转

      • 媒体组件

      • 地图

      • 画布

      • 网页嵌入

      • 页面属性配置节点

      • nvue组件

        • 条形码/二维码组件
        • 基础列表组件
        • 列表单元格组件
        • 虚拟列表组件
        • 瀑布流组件
        • 下拉刷新组件
          • 1. 什么是 refresh 组件?
          • 2. refresh 组件的常用属性
            • 2.1 控制 refresh 组件显示与隐藏
          • 3. 事件
            • 3.1 监听 refresh 事件
            • 3.2 监听 pullingdown 事件
          • 4. 完整的下拉刷新功能
      • 小程序组件

    • 扩展组件

  • 小程序开发
  • uniapp多端开发
  • 内置组件
  • nvue组件
scholar
2024-10-21
目录

下拉刷新组件

# 下拉刷新组件

refresh 组件是 App 端 nvue 页面中实现下拉刷新功能的核心组件。它为 scroll-view、list、waterfall 等容器提供灵活、高性能的下拉刷新能力。开发者可以自定义下拉刷新的样式和内容,通过简单的事件绑定实现与后端数据的同步。

# 1. 什么是 refresh 组件?

refresh 组件用于在 scroll-view、list、waterfall 等滚动容器中实现下拉刷新效果。通过监听下拉动作,触发刷新事件,并在刷新完成后更新页面内容。refresh 可以灵活定义下拉显示的内容,并支持结合 loading-indicator 组件展示动画效果。

使用场景

  • 数据同步:在页面下拉时触发刷新,通常用于从服务器获取最新数据并更新页面。
  • 内容更新提示:结合 loading-indicator 展示加载状态,给用户明确的操作反馈。

# 2. refresh 组件的常用属性

refresh 组件提供了一个主要的属性用于控制显示状态,开发者可以通过修改此属性来控制下拉刷新的显示和隐藏。

属性名 类型 默认值 说明
display String show 控制 <refresh> 组件的显示与隐藏。值为 show 时显示,值为 hide 时隐藏。必须成对使用,即 show 后必须有相应的 hide。

# 2.1 控制 refresh 组件显示与隐藏

  • 说明:通过 display 属性控制 refresh 组件的显示和隐藏状态。用于在数据刷新完成后隐藏刷新组件。
  • 类型:String
  • 默认值:show
<template>
  <scroll-view>
    <!-- 定义下拉刷新组件 -->
    <refresh :display="isRefreshing ? 'show' : 'hide'" @refresh="onRefresh">
      <text>Refreshing...</text>
      <loading-indicator></loading-indicator>
    </refresh>
    
    <!-- 列表内容 -->
    <view v-for="(item, index) in lists" :key="index">
      <text>{{ item }}</text>
    </view>
  </scroll-view>
</template>

<script setup>
import { ref } from 'vue'

// 模拟列表数据
const lists = ref(['A', 'B', 'C', 'D', 'E'])
const isRefreshing = ref(false)

// 模拟刷新操作
const onRefresh = () => {
  setTimeout(() => {
    // 更新数据
    lists.value.push('F', 'G', 'H')
    isRefreshing.value = false
  }, 1000)
}
</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
30
31

# 3. 事件

refresh 组件提供了两个主要事件,分别用于监听下拉动作和下拉完成时触发的刷新操作。

事件名 说明 返回参数
refresh 当容器被下拉完成时触发。通常用于触发实际的数据刷新逻辑。 无
pullingdown 当容器正在下拉时触发。可以从事件参数中获取当前下拉的距离等数据,用于自定义下拉效果。 dy, pullingDistance, viewHeight, type

# 3.1 监听 refresh 事件

  • 说明:refresh 事件用于在用户完成下拉操作时触发数据刷新。在刷新完成后,可以通过隐藏 refresh 组件来恢复页面状态。
<template>
  <scroll-view>
    <!-- 下拉刷新组件,监听 refresh 事件 -->
    <refresh :display="isRefreshing ? 'show' : 'hide'" @refresh="onRefresh">
      <text>Refreshing...</text>
      <loading-indicator></loading-indicator>
    </refresh>

    <!-- 列表内容 -->
    <view v-for="(item, index) in lists" :key="index">
      <text>{{ item }}</text>
    </view>
  </scroll-view>
</template>

<script setup>
import { ref } from 'vue'

// 模拟列表数据
const lists = ref(['A', 'B', 'C', 'D', 'E'])
const isRefreshing = ref(false)

// 刷新操作
const onRefresh = () => {
  isRefreshing.value = true
  setTimeout(() => {
    // 模拟更新数据
    lists.value.push('F', 'G', 'H')
    isRefreshing.value = false
  }, 1000)
}
</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
30
31
32

# 3.2 监听 pullingdown 事件

  • 说明:pullingdown 事件在下拉过程中触发,可以根据下拉距离自定义下拉显示的效果。
<template>
  <scroll-view>
    <!-- 下拉刷新组件,监听 pullingdown 事件 -->
    <refresh 
      :display="isRefreshing ? 'show' : 'hide'" 
      @refresh="onRefresh" 
      @pullingdown="onPullingDown"
    >
      <text>{{ pullDistance }} px pulled down...</text>
      <loading-indicator></loading-indicator>
    </refresh>

    <!-- 列表内容 -->
    <view v-for="(item, index) in lists" :key="index">
      <text>{{ item }}</text>
    </view>
  </scroll-view>
</template>

<script setup>
import { ref } from 'vue'

// 模拟列表数据
const lists = ref(['A', 'B', 'C', 'D', 'E'])
const isRefreshing = ref(false)
const pullDistance = ref(0)

// 监听下拉刷新过程
const onPullingDown = (event) => {
  pullDistance.value = event.pullingDistance
}

// 刷新操作
const onRefresh = () => {
  isRefreshing.value = true
  setTimeout(() => {
    // 模拟更新数据
    lists.value.push('F', 'G', 'H')
    isRefreshing.value = false
  }, 1000)
}
</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
30
31
32
33
34
35
36
37
38
39
40
41
42

# 4. 完整的下拉刷新功能

以下案例展示了如何结合 refresh 组件实现下拉刷新功能,结合 loading-indicator 提示用户当前的刷新状态,并在下拉过程中自定义下拉显示的内容。

<template>
  <scroll-view>
    <!-- 下拉刷新组件,结合 pullingdown 和 refresh 事件 -->
    <refresh 
      :display="isRefreshing ? 'show' : 'hide'" 
      @refresh="onRefresh" 
      @pullingdown="onPullingDown"
    >
      <text>{{ pullDistance }} px pulled down...</text>
      <loading-indicator></loading-indicator>
    </refresh>

    <!-- 列表内容 -->
    <view v-for="(item, index) in lists" :key="index">
      <text>{{ item }}</text>
    </view>
  </scroll-view>
</template>

<script setup>
import { ref } from 'vue'

// 模拟列表数据
const lists = ref(['A', 'B', 'C', 'D', 'E'])
const isRefreshing = ref(false)
const pullDistance = ref(0)

// 监听下拉刷新过程
const onPullingDown = (event) => {
  pullDistance.value = event.pullingDistance
}

// 刷新操作
const onRefresh = () => {
  isRefreshing.value = true
  setTimeout(() => {
    // 模拟更新数据
    lists.value.push('F', 'G', 'H')
    isRefreshing.value = false
  }, 1000)
}
</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
30
31
32
33
34
35
36
37
38
39
40
41
42
编辑此页 (opens new window)
上次更新: 2025/02/01, 02:18:15
瀑布流组件
公众号关注组件

← 瀑布流组件 公众号关注组件→

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