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![zh-cn_image_0000001232775585](figures/zh-cn_image_0000001232775585.gif)
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![zh-cn_image_scrollbar](figures/zh-cn_image_scrollbar.gif)
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![EnableNestedScroll](figures/EnableNestedScroll.gif)