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 \| number | 否 | 下拉起点距离组件顶部的距离。<br/>默认值:16,单位vp <br/>从API version 11开始废弃,无替代接口<br/>**说明:**<br/>offset取值范围[0vp,64vp]。大于64vp按照64vp处理。不支持百分比,不支持负数 。| 32| friction<sup>(deprecated)</sup> | number \| string | 否 | 下拉摩擦系数,取值范围为0到100。<br/>默认值:62<br/>- 0表示下拉刷新容器不跟随手势下拉而下拉。<br/>- 100表示下拉刷新容器紧紧跟随手势下拉而下拉。<br/>- 数值越大,下拉刷新容器跟随手势下拉的反应越灵敏。<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/>- 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 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