1e41f4b71Sopenharmony_ci# ScrollBar 2e41f4b71Sopenharmony_ci 3e41f4b71Sopenharmony_ci滚动条组件ScrollBar,用于配合可滚动组件使用,如List、Grid、Scroll。 4e41f4b71Sopenharmony_ci 5e41f4b71Sopenharmony_ci> **说明:** 6e41f4b71Sopenharmony_ci> 7e41f4b71Sopenharmony_ci> 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 8e41f4b71Sopenharmony_ci 9e41f4b71Sopenharmony_ci 10e41f4b71Sopenharmony_ci## 子组件 11e41f4b71Sopenharmony_ci 12e41f4b71Sopenharmony_ci可以包含单个子组件。 13e41f4b71Sopenharmony_ci 14e41f4b71Sopenharmony_ci 15e41f4b71Sopenharmony_ci## 接口 16e41f4b71Sopenharmony_ci 17e41f4b71Sopenharmony_ciScrollBar(value: ScrollBarOptions) 18e41f4b71Sopenharmony_ci 19e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 20e41f4b71Sopenharmony_ci 21e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full 22e41f4b71Sopenharmony_ci 23e41f4b71Sopenharmony_ci**参数:** 24e41f4b71Sopenharmony_ci 25e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 26e41f4b71Sopenharmony_ci| -------- | -------- | -------- | -------- | 27e41f4b71Sopenharmony_ci| value | [ScrollBarOptions](#scrollbaroptions对象说明)| 是 | 滚动条组件参数。 | 28e41f4b71Sopenharmony_ci 29e41f4b71Sopenharmony_ci## 属性 30e41f4b71Sopenharmony_ci 31e41f4b71Sopenharmony_ci除支持[通用属性](ts-universal-attributes-size.md)外,还支持以下属性: 32e41f4b71Sopenharmony_ci 33e41f4b71Sopenharmony_ci## enableNestedScroll<sup>14+</sup> 34e41f4b71Sopenharmony_ci 35e41f4b71Sopenharmony_cienableNestedScroll(value: boolean) 36e41f4b71Sopenharmony_ci 37e41f4b71Sopenharmony_ci设置滚动条是否嵌套滚动。 38e41f4b71Sopenharmony_ci 39e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 14开始,该接口支持在原子化服务中使用。 40e41f4b71Sopenharmony_ci 41e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full 42e41f4b71Sopenharmony_ci 43e41f4b71Sopenharmony_ci**参数:** 44e41f4b71Sopenharmony_ci 45e41f4b71Sopenharmony_ci| 参数名 | 类型 | 必填 | 说明 | 46e41f4b71Sopenharmony_ci| ------ | ------- | ---- | ------------------------------------- | 47e41f4b71Sopenharmony_ci| value | boolean | 是 | 是否执行嵌套滚动。设置为true执行嵌套滚动,设置为false不嵌套滚动。 <br/>默认值:false | 48e41f4b71Sopenharmony_ci 49e41f4b71Sopenharmony_ci## ScrollBarOptions对象说明 50e41f4b71Sopenharmony_ci 51e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 52e41f4b71Sopenharmony_ci 53e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full 54e41f4b71Sopenharmony_ci 55e41f4b71Sopenharmony_ci| 名称 | 类型 | 必填 | 说明 | 56e41f4b71Sopenharmony_ci| -------- | -------- | -------- | -------- | 57e41f4b71Sopenharmony_ci| scroller | [Scroller](ts-container-scroll.md#scroller) | 是 | 可滚动组件的控制器。用于与可滚动组件进行绑定。 | 58e41f4b71Sopenharmony_ci| direction | [ScrollBarDirection](#scrollbardirection枚举说明) | 否 | 滚动条的方向,控制可滚动组件对应方向的滚动。<br/>默认值:ScrollBarDirection.Vertical | 59e41f4b71Sopenharmony_ci| state | [BarState](ts-appendix-enums.md#barstate) | 否 | 滚动条状态。<br/>默认值:BarState.Auto | 60e41f4b71Sopenharmony_ci 61e41f4b71Sopenharmony_ci> **说明:** 62e41f4b71Sopenharmony_ci> 63e41f4b71Sopenharmony_ci> ScrollBar组件负责定义可滚动区域的行为样式,ScrollBar的子节点负责定义滚动条的行为样式。 64e41f4b71Sopenharmony_ci> 65e41f4b71Sopenharmony_ci> 滚动条组件与可滚动组件通过Scroller进行绑定,且只有当两者方向相同时,才能联动,ScrollBar与可滚动组件仅支持一对一绑定。 66e41f4b71Sopenharmony_ci> 67e41f4b71Sopenharmony_ci> 从API version 12开始,ScrollBar组件没有子节点时,支持显示默认样式的滚动条。 68e41f4b71Sopenharmony_ci 69e41f4b71Sopenharmony_ci## ScrollBarDirection枚举说明 70e41f4b71Sopenharmony_ci 71e41f4b71Sopenharmony_ci**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 72e41f4b71Sopenharmony_ci 73e41f4b71Sopenharmony_ci**系统能力:** SystemCapability.ArkUI.ArkUI.Full 74e41f4b71Sopenharmony_ci 75e41f4b71Sopenharmony_ci| 名称 | 说明 | 76e41f4b71Sopenharmony_ci| -------- | -------- | 77e41f4b71Sopenharmony_ci| Vertical | 纵向滚动条。 | 78e41f4b71Sopenharmony_ci| Horizontal | 横向滚动条。 | 79e41f4b71Sopenharmony_ci 80e41f4b71Sopenharmony_ci 81e41f4b71Sopenharmony_ci## 示例1 82e41f4b71Sopenharmony_ci 83e41f4b71Sopenharmony_ci该示例为ScrollBar组件有子节点时的滚动条样式。 84e41f4b71Sopenharmony_ci 85e41f4b71Sopenharmony_ci```ts 86e41f4b71Sopenharmony_ci// xxx.ets 87e41f4b71Sopenharmony_ci@Entry 88e41f4b71Sopenharmony_ci@Component 89e41f4b71Sopenharmony_cistruct ScrollBarExample { 90e41f4b71Sopenharmony_ci private scroller: Scroller = new Scroller() 91e41f4b71Sopenharmony_ci private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] 92e41f4b71Sopenharmony_ci 93e41f4b71Sopenharmony_ci build() { 94e41f4b71Sopenharmony_ci Column() { 95e41f4b71Sopenharmony_ci Stack({ alignContent: Alignment.End }) { 96e41f4b71Sopenharmony_ci Scroll(this.scroller) { 97e41f4b71Sopenharmony_ci Flex({ direction: FlexDirection.Column }) { 98e41f4b71Sopenharmony_ci ForEach(this.arr, (item: number) => { 99e41f4b71Sopenharmony_ci Row() { 100e41f4b71Sopenharmony_ci Text(item.toString()) 101e41f4b71Sopenharmony_ci .width('80%') 102e41f4b71Sopenharmony_ci .height(60) 103e41f4b71Sopenharmony_ci .backgroundColor('#3366CC') 104e41f4b71Sopenharmony_ci .borderRadius(15) 105e41f4b71Sopenharmony_ci .fontSize(16) 106e41f4b71Sopenharmony_ci .textAlign(TextAlign.Center) 107e41f4b71Sopenharmony_ci .margin({ top: 5 }) 108e41f4b71Sopenharmony_ci } 109e41f4b71Sopenharmony_ci }, (item:number) => item.toString()) 110e41f4b71Sopenharmony_ci }.margin({ right: 15 }) 111e41f4b71Sopenharmony_ci } 112e41f4b71Sopenharmony_ci .width('90%') 113e41f4b71Sopenharmony_ci .scrollBar(BarState.Off) 114e41f4b71Sopenharmony_ci .scrollable(ScrollDirection.Vertical) 115e41f4b71Sopenharmony_ci ScrollBar({ scroller: this.scroller, direction: ScrollBarDirection.Vertical,state: BarState.Auto }) { 116e41f4b71Sopenharmony_ci Text() 117e41f4b71Sopenharmony_ci .width(20) 118e41f4b71Sopenharmony_ci .height(100) 119e41f4b71Sopenharmony_ci .borderRadius(10) 120e41f4b71Sopenharmony_ci .backgroundColor('#C0C0C0') 121e41f4b71Sopenharmony_ci }.width(20).backgroundColor('#ededed') 122e41f4b71Sopenharmony_ci } 123e41f4b71Sopenharmony_ci } 124e41f4b71Sopenharmony_ci } 125e41f4b71Sopenharmony_ci} 126e41f4b71Sopenharmony_ci``` 127e41f4b71Sopenharmony_ci 128e41f4b71Sopenharmony_ci 129e41f4b71Sopenharmony_ci 130e41f4b71Sopenharmony_ci 131e41f4b71Sopenharmony_ci## 示例2 132e41f4b71Sopenharmony_ci 133e41f4b71Sopenharmony_ci该示例为ScrollBar组件没有子节点时的滚动条样式。 134e41f4b71Sopenharmony_ci 135e41f4b71Sopenharmony_ci```ts 136e41f4b71Sopenharmony_ci@Entry 137e41f4b71Sopenharmony_ci@Component 138e41f4b71Sopenharmony_cistruct ScrollBarExample { 139e41f4b71Sopenharmony_ci private scroller: Scroller = new Scroller() 140e41f4b71Sopenharmony_ci private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] 141e41f4b71Sopenharmony_ci 142e41f4b71Sopenharmony_ci build() { 143e41f4b71Sopenharmony_ci Column() { 144e41f4b71Sopenharmony_ci Stack({ alignContent: Alignment.End }) { 145e41f4b71Sopenharmony_ci Scroll(this.scroller) { 146e41f4b71Sopenharmony_ci Flex({ direction: FlexDirection.Column }) { 147e41f4b71Sopenharmony_ci ForEach(this.arr, (item: number) => { 148e41f4b71Sopenharmony_ci Row() { 149e41f4b71Sopenharmony_ci Text(item.toString()) 150e41f4b71Sopenharmony_ci .width('80%') 151e41f4b71Sopenharmony_ci .height(60) 152e41f4b71Sopenharmony_ci .backgroundColor('#3366CC') 153e41f4b71Sopenharmony_ci .borderRadius(15) 154e41f4b71Sopenharmony_ci .fontSize(16) 155e41f4b71Sopenharmony_ci .textAlign(TextAlign.Center) 156e41f4b71Sopenharmony_ci .margin({ top: 5 }) 157e41f4b71Sopenharmony_ci } 158e41f4b71Sopenharmony_ci }, (item:number) => item.toString()) 159e41f4b71Sopenharmony_ci }.margin({ right: 15 }) 160e41f4b71Sopenharmony_ci } 161e41f4b71Sopenharmony_ci .width('90%') 162e41f4b71Sopenharmony_ci .scrollBar(BarState.Off) 163e41f4b71Sopenharmony_ci .scrollable(ScrollDirection.Vertical) 164e41f4b71Sopenharmony_ci ScrollBar({ scroller: this.scroller, direction: ScrollBarDirection.Vertical,state: BarState.Auto }) 165e41f4b71Sopenharmony_ci } 166e41f4b71Sopenharmony_ci } 167e41f4b71Sopenharmony_ci } 168e41f4b71Sopenharmony_ci} 169e41f4b71Sopenharmony_ci``` 170e41f4b71Sopenharmony_ci 171e41f4b71Sopenharmony_ci 172e41f4b71Sopenharmony_ci 173e41f4b71Sopenharmony_ci 174e41f4b71Sopenharmony_ci## 示例3 175e41f4b71Sopenharmony_ci 176e41f4b71Sopenharmony_ci该示例为ScrollBar组件支持嵌套滚动的样式。 177e41f4b71Sopenharmony_ci```ts 178e41f4b71Sopenharmony_ci@Entry 179e41f4b71Sopenharmony_ci@Component 180e41f4b71Sopenharmony_cistruct StickyNestedScroll { 181e41f4b71Sopenharmony_ci listScroller: Scroller = new Scroller(); 182e41f4b71Sopenharmony_ci @State array: number[] = [] 183e41f4b71Sopenharmony_ci 184e41f4b71Sopenharmony_ci @Styles 185e41f4b71Sopenharmony_ci listCard() { 186e41f4b71Sopenharmony_ci .backgroundColor(Color.White) 187e41f4b71Sopenharmony_ci .height(72) 188e41f4b71Sopenharmony_ci .width("100%") 189e41f4b71Sopenharmony_ci .borderRadius(12) 190e41f4b71Sopenharmony_ci } 191e41f4b71Sopenharmony_ci 192e41f4b71Sopenharmony_ci build() { 193e41f4b71Sopenharmony_ci Stack() { 194e41f4b71Sopenharmony_ci Scroll() { 195e41f4b71Sopenharmony_ci Column() { 196e41f4b71Sopenharmony_ci Text('Scroll Area') 197e41f4b71Sopenharmony_ci .width("100%") 198e41f4b71Sopenharmony_ci .height("40%") 199e41f4b71Sopenharmony_ci .backgroundColor('#0080DC') 200e41f4b71Sopenharmony_ci .textAlign(TextAlign.Center) 201e41f4b71Sopenharmony_ci List({ space: 10, scroller: this.listScroller }) { 202e41f4b71Sopenharmony_ci ForEach(this.array, (item: number) => { 203e41f4b71Sopenharmony_ci ListItem() { 204e41f4b71Sopenharmony_ci Text('item' + item) 205e41f4b71Sopenharmony_ci .fontSize(16) 206e41f4b71Sopenharmony_ci } 207e41f4b71Sopenharmony_ci .listCard() 208e41f4b71Sopenharmony_ci }, (item: string) => item) 209e41f4b71Sopenharmony_ci } 210e41f4b71Sopenharmony_ci .scrollBar(BarState.Off) 211e41f4b71Sopenharmony_ci .nestedScroll({ 212e41f4b71Sopenharmony_ci scrollForward: NestedScrollMode.PARENT_FIRST, 213e41f4b71Sopenharmony_ci scrollBackward: NestedScrollMode.SELF_FIRST 214e41f4b71Sopenharmony_ci }) 215e41f4b71Sopenharmony_ci .height("100%") 216e41f4b71Sopenharmony_ci } 217e41f4b71Sopenharmony_ci .width("100%") 218e41f4b71Sopenharmony_ci } 219e41f4b71Sopenharmony_ci .edgeEffect(EdgeEffect.Spring) 220e41f4b71Sopenharmony_ci .backgroundColor('#DCDCDC') 221e41f4b71Sopenharmony_ci .scrollBar(BarState.Off) 222e41f4b71Sopenharmony_ci .width('100%') 223e41f4b71Sopenharmony_ci .height('100%') 224e41f4b71Sopenharmony_ci ScrollBar({ scroller: this.listScroller}) 225e41f4b71Sopenharmony_ci .position({right:0}) 226e41f4b71Sopenharmony_ci .enableNestedScroll(true) 227e41f4b71Sopenharmony_ci } 228e41f4b71Sopenharmony_ci } 229e41f4b71Sopenharmony_ci 230e41f4b71Sopenharmony_ci aboutToAppear() { 231e41f4b71Sopenharmony_ci for (let i = 0; i < 15; i++) { 232e41f4b71Sopenharmony_ci this.array.push(i) 233e41f4b71Sopenharmony_ci } 234e41f4b71Sopenharmony_ci } 235e41f4b71Sopenharmony_ci} 236e41f4b71Sopenharmony_ci``` 237e41f4b71Sopenharmony_ci