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