• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Refresh
2
3 可以进行页面下拉操作并显示刷新动效的容器组件。
4
5>  **说明:**
6>
7>  该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8
9
10## 子组件
11
12支持单个子组件。
13
14从API version 11开始,Refresh子组件会跟随手势下拉而下移。
15
16## 接口
17
18Refresh(value: RefreshOptions)
19
20**参数:**
21
22| 参数名 | 参数类型 | 必填 | 参数描述 |
23| -------- | -------- | -------- | -------- |
24| value |  [RefreshOptions](#refreshoptions对象说明)| 是 | 刷新组件参数。 |
25
26## RefreshOptions对象说明
27
28| 参数         | 参数名                                      | 必填   | 参数描述                                     |
29| ---------- | ---------------------------------------- | ---- | ---------------------------------------- |
30| refreshing | boolean                                  | 是    | 当前组件是否正在刷新。<br/>默认值:false<br/>该参数支持[$$](../../../quick-start/arkts-two-way-sync.md)双向绑定变量。 |
31| offset<sup>(deprecated)</sup>    | string&nbsp;\|&nbsp;number               | 否    | 下拉起点距离组件顶部的距离。<br/>默认值:16,单位vp <br/>从API version 11开始废弃,无替代接口<br/>**说明:**<br/>offset取值范围[0vp,64vp]。大于64vp按照64vp处理。不支持百分比,不支持负数 。|
32| friction<sup>(deprecated)</sup>   | number&nbsp;\|&nbsp;string               | 否    | 下拉摩擦系数,取值范围为0到100。<br/>默认值:62<br/>-&nbsp;0表示下拉刷新容器不跟随手势下拉而下拉。<br/>-&nbsp;100表示下拉刷新容器紧紧跟随手势下拉而下拉。<br/>-&nbsp;数值越大,下拉刷新容器跟随手势下拉的反应越灵敏。<br/>从API version 11开始废弃,无替代接口 |
33| builder<sup>10+</sup>    | [CustomBuilder](ts-types.md#custombuilder8) | 否    | 下拉时,自定义刷新样式的组件。<br/>**说明:**<br/>API version 10及之前版本,自定义组件的高度限制在64vp之内。API version 11及以后版本没有此限制。|
34
35## 属性
36
37支持[通用属性](ts-universal-attributes-size.md)。
38
39## 事件
40
41除支持[通用事件](ts-universal-events-click.md)外,还支持以下事件:
42
43
44| 名称                                       | 描述                                     |
45| ---------------------------------------- | -------------------------------------- |
46| onStateChange(callback: (state: [RefreshStatus](#refreshstatus枚举说明)) => void) | 当前刷新状态变更时,触发回调。<br/>-&nbsp;state:刷新状态。 |
47| onRefreshing(callback: () => void)       | 进入刷新状态时触发回调。                           |
48
49## RefreshStatus枚举说明
50
51| 名称       | 具体值       | 描述                   |
52| -------- | -------- | -------------------- |
53| Inactive | 0 | 默认未下拉状态。             |
54| Drag     | 1 | 下拉中,下拉距离小于刷新距离。      |
55| OverDrag | 2 | 下拉中,下拉距离超过刷新距离。      |
56| Refresh  | 3 | 下拉结束,回弹至刷新距离,进入刷新状态。 |
57| Done     | 4 | 刷新结束,返回初始状态(顶部)。     |
58
59
60## 示例
61### 示例1
62刷新组件使用默认样式:
63
64```ts
65// xxx.ets
66@Entry
67@Component
68struct RefreshExample {
69  @State isRefreshing: boolean = false
70  @State arr: String[] = ['0', '1', '2', '3', '4','5','6','7','8','9','10']
71
72  build() {
73    Column() {
74      Refresh({ refreshing: $$this.isRefreshing}) {
75        List() {
76          ForEach(this.arr, (item: string) => {
77            ListItem() {
78              Text('' + item)
79                .width('100%').height(100).fontSize(16)
80                .textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xFFFFFF)
81            }
82          }, (item: string) => item)
83        }
84        .onScrollIndex((first: number) => {
85          console.info(first.toString())
86        })
87        .width('100%')
88        .height('100%')
89        .divider({strokeWidth:1,color:Color.Yellow,startMargin:10,endMargin:10})
90        .scrollBar(BarState.Off)
91      }
92      .onStateChange((refreshStatus: RefreshStatus) => {
93        console.info('Refresh onStatueChange state is ' + refreshStatus)
94      })
95      .onRefreshing(() => {
96        setTimeout(() => {
97          this.isRefreshing = false
98        }, 2000)
99        console.log('onRefreshing test')
100      })
101      .backgroundColor(0x89CFF0)
102    }
103  }
104}
105```
106
107![zh-cn_image_refresh_example1](figures/zh-cn_image_refresh_example1.gif)
108
109### 示例2
110
111自定义刷新组件:
112
113```ts
114// xxx.ets
115@Entry
116@Component
117struct RefreshExample {
118  @State isRefreshing: boolean = false
119  @State arr: String[] = ['0', '1', '2', '3', '4','5','6','7','8','9','10']
120  @Builder
121  customRefreshComponent()
122  {
123    Stack()
124    {
125      Row()
126      {
127        LoadingProgress().height(32)
128        Text("正在刷新...").fontSize(16).margin({left:20})
129      }
130      .alignItems(VerticalAlign.Center)
131    }.width("100%").align(Alignment.Center)
132  }
133
134  build() {
135    Column() {
136      Refresh({ refreshing: $$this.isRefreshing,builder:this.customRefreshComponent()}) {
137        List() {
138          ForEach(this.arr, (item: string) => {
139            ListItem() {
140              Text('' + item)
141                .width('100%').height(100).fontSize(16)
142                .textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xFFFFFF)
143            }
144          }, (item: string) => item)
145        }
146        .onScrollIndex((first: number) => {
147          console.info(first.toString())
148        })
149        .width('100%')
150        .height('100%')
151        .divider({strokeWidth:1,color:Color.Yellow,startMargin:10,endMargin:10})
152        .scrollBar(BarState.Off)
153      }
154      .onStateChange((refreshStatus: RefreshStatus) => {
155        console.info('Refresh onStatueChange state is ' + refreshStatus)
156      })
157      .onRefreshing(() => {
158        setTimeout(() => {
159          this.isRefreshing = false
160        }, 2000)
161        console.log('onRefreshing test')
162      })
163      .backgroundColor(0x89CFF0)
164    }
165  }
166}
167```
168
169![zh-cn_image_refresh_example2](figures/zh-cn_image_refresh_example2.gif)