• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Slider
2<!--Kit: ArkUI-->
3<!--Subsystem: ArkUI-->
4<!--Owner: @liyi0309-->
5<!--Designer: @liyi0309-->
6<!--Tester: @lxl007-->
7<!--Adviser: @HelloCrease-->
8
9滑动条组件,通常用于快速调节设置值,如音量调节、亮度调节等应用场景。
10
11>  **说明:**
12>
13>  该组件从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
14
15
16## 子组件
17
1819
20
21## 接口
22
23Slider(options?: SliderOptions)
24
25**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
26
27**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
28
29**系统能力:** SystemCapability.ArkUI.ArkUI.Full
30
31**参数:**
32
33| 参数名  | 类型                                    | 必填 | 说明               |
34| ------- | --------------------------------------- | ---- | ------------------ |
35| options | [SliderOptions](#slideroptions对象说明) | 否   | 配置滑动条的参数。 |
36
37## SliderOptions对象说明
38
39滑动条的信息。
40
41**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
42
43**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
44
45**系统能力:** SystemCapability.ArkUI.ArkUI.Full
46
47| 名称 | 类型 | 只读 | 可选 | 说明 |
48| -------- | -------- | -------- | -------- | -------- |
49| value | number | 否 | 是 | 当前进度值。<br/>默认值:与参数min的取值一致。<br />从API version 10开始,该参数支持[$$](../../../ui/state-management/arkts-two-way-sync.md)双向绑定变量。<br />该参数支持[!!](../../../ui/state-management/arkts-new-binding.md#系统组件参数双向绑定)双向绑定变量。<br/>取值范围: [min, max]<br/>小于min时取min,大于max时取max。<br/>$$运算符为系统组件提供TS变量的引用,使得TS变量和slider组件的value值保持同步。详细使用示例请参考[示例7设置滑动条的双向绑定](#示例7设置滑动条的双向绑定)。 |
50| min | number | 否 | 是 | 设置最小值。<br/>默认值:0 |
51| max | number | 否 | 是 | 设置最大值。<br/>默认值:100<br/>**说明:** <br/>min >= max异常情况,min取默认值0,max取默认值100。<br/>value不在[min, max]范围之内,取min或者max,靠近min取min,靠近max取max。 |
52| step | number | 否 | 是 | 设置Slider滑动步长。<br/>默认值:1<br/>取值范围:[0.01, max - min]<br/>**说明:** <br/>若设置的step值小于0或大于max值,则按默认值显示。 |
53| style | [SliderStyle](#sliderstyle枚举说明) | 否 | 是 | 设置Slider的滑块与滑轨显示样式。<br/>默认值:SliderStyle.OutSet |
54| direction<sup>8+</sup> | [Axis](ts-appendix-enums.md#axis) | 否 | 是 | 设置滑动条滑动方向为水平或竖直方向。<br/>默认值:Axis.Horizontal |
55| reverse<sup>8+</sup> | boolean | 否 | 是 | 设置滑动条取值范围是否反向。<br/>默认值:false<br/>值为true时,横向Slider从右往左滑动,竖向Slider从下往上滑动。值为false时,横向Slider从左往右滑动,竖向Slider从上往下滑动。 |
56
57## SliderStyle枚举说明
58
59滑动条滑块在滑轨上显示的样式。
60
61**系统能力:** SystemCapability.ArkUI.ArkUI.Full
62
63| 名称 | 说明 |
64| -------- | -------- |
65| OutSet | 滑块在滑轨上。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
66| InSet | 滑块在滑轨内。<br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
67| NONE<sup>12+</sup> | 无滑块 <br/>**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 |
68
69>  **说明:**
70>
71>  - Slider无默认padding。
72>  - 当Slider为水平滑动条时,默认高度为40vp,宽度为父容器的宽度,滑动条居中显示,当滑动条的style为SliderStyle.OutSet时,左右间距分别为9vp,即为[blockSize](#blocksize10)宽度的一半,当滑动条的style为SliderStyle.InSet时,左右间距分别为6vp,若设置padding,padding不会覆盖左右间距。
73>  - 当Slider为竖直滑动条时,默认宽度为40vp,高度为父容器的高度,滑动条居中显示,当滑动条的style为SliderStyle.OutSet时,上下间距分别为10vp,当滑动条的style为SliderStyle.InSet时,上下间距分别为6vp,若设置padding,padding不会覆盖上下间距。
74
75## 属性
76
77支持除触摸热区以外的[通用属性](ts-component-general-attributes.md)。
78
79### blockColor
80
81blockColor(value: ResourceColor)
82
83设置滑块的颜色。
84
85当滑块形状设置为SliderBlockType.DEFAULT时,blockColor可设置默认圆形滑块颜色。
86
87当滑块形状设置为SliderBlockType.IMAGE时,滑块无填充,设置blockColor不生效。
88
89当滑块形状设置为SliderBlockType.SHAPE时,blockColor可设置自定义形状的填充颜色。
90
91**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
92
93**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
94
95**系统能力:** SystemCapability.ArkUI.ArkUI.Full
96
97**参数:**
98
99| 参数名 | 类型                                       | 必填 | 说明                                |
100| ------ | ------------------------------------------ | ---- | ----------------------------------- |
101| value  | [ResourceColor](ts-types.md#resourcecolor) | 是   | 滑块的颜色。 <br/>默认值:`$r('sys.color.ohos_id_color_foreground_contrary')` |
102
103### trackColor
104
105trackColor(value: ResourceColor | LinearGradient)
106
107设置滑轨的背景颜色。
108
109从API version 12开始支持利用LinearGradient设置滑轨的渐变色。
110
111**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
112
113**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
114
115**系统能力:** SystemCapability.ArkUI.ArkUI.Full
116
117**参数:**
118
119| 参数名 | 类型                                                         | 必填 | 说明                                                         |
120| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
121| value  | [ResourceColor](ts-types.md#resourcecolor)&nbsp;\|&nbsp;[LinearGradient<sup>12+</sup>](ts-basic-components-datapanel.md#lineargradient10) | 是   | 滑轨的背景颜色。<br/>**说明:** <br/>设置渐变色时,如果颜色断点颜色值为非法值或渐变色断点为空,渐变色将不起效果。默认值:`$r('sys.color.ohos_id_color_component_normal')`。注意:该接口中的LinearGradient类型不支持在原子化服务中使用。 |
122
123### selectedColor
124
125selectedColor(value: ResourceColor)
126
127设置滑轨的已滑动部分颜色。
128
129**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
130
131**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
132
133**系统能力:** SystemCapability.ArkUI.ArkUI.Full
134
135**参数:**
136
137| 参数名 | 类型                                       | 必填 | 说明                                                         |
138| ------ | ------------------------------------------ | ---- | ------------------------------------------------------------ |
139| value  | [ResourceColor](ts-types.md#resourcecolor) | 是   | 滑轨的已滑动部分颜色。 <br/>**说明:** <br/>设置渐变色时,如果颜色断点颜色值为非法值或渐变色断点为空,渐变色将不起效果。默认值:`$r('sys.color.ohos_id_color_emphasize')` |
140
141### selectedColor<sup>18+</sup>
142
143selectedColor(selectedColor: ResourceColor | LinearGradient)
144
145设置滑轨的已滑动部分颜色。与[selectedColor](#selectedcolor)相比,新增了LinearGradient类型的支持。
146
147从API version 18开始支持利用LinearGradient设置滑轨的已滑动部分的渐变色。
148
149**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
150
151**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
152
153**系统能力:** SystemCapability.ArkUI.ArkUI.Full
154
155**参数:**
156
157| 参数名        | 类型                                                         | 必填 | 说明                                                         |
158| ------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
159| selectedColor | [ResourceColor](ts-types.md#resourcecolor)&nbsp;\|&nbsp;[LinearGradient<sup>18+</sup>](ts-basic-components-datapanel.md#lineargradient10) | 是   | 滑轨的已滑动部分颜色。 <br/>**说明:** <br/>设置渐变色时,若颜色断点颜色值为非法值或者渐变色断点为空时,渐变色不起效果。 <br/>默认值:`$r('sys.color.ohos_id_color_emphasize')` |
160
161### showSteps
162
163showSteps(value: boolean)
164
165设置当前是否显示步长刻度值。
166
167**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
168
169**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
170
171**系统能力:** SystemCapability.ArkUI.ArkUI.Full
172
173**参数:**
174
175| 参数名 | 类型    | 必填 | 说明                                       |
176| ------ | ------- | ---- | ------------------------------------------ |
177| value  | boolean | 是   | 当前是否显示步长刻度值。值为true时显示刻度值,值为false时不显示刻度值。<br/>默认值:false |
178
179### showTips
180
181showTips(value: boolean, content?: ResourceStr)
182
183设置滑动时是否显示气泡提示。
184
185当direction的值为Axis.Horizontal时,tip显示在滑块上方,如果上方空间不够,则在下方显示。当值为Axis.Vertical时,tip显示在滑块左边,如果左边空间不够,则在右边显示。当不设置周边边距或者周边边距比较小时,tip会被截断。
186
187tip的绘制区域为Slider自身节点的overlay。
188
189**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
190
191**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
192
193**系统能力:** SystemCapability.ArkUI.ArkUI.Full
194
195**参数:**
196
197| 参数名                | 类型                                   | 必填 | 说明                                       |
198| --------------------- | -------------------------------------- | ---- | ------------------------------------------ |
199| value                 | boolean                                | 是   | 滑动时是否显示气泡提示。值为true时显示气泡。值为false时不显示气泡。<br/>默认值:false |
200| content<sup>10+</sup> | [ResourceStr](ts-types.md#resourcestr) | 否   | 气泡提示的文本内容,默认显示当前百分比。   |
201
202### trackThickness<sup>8+</sup>
203
204trackThickness(value: Length)
205
206设置滑轨的粗细。设置小于等于0的值时,取默认值。
207
208为保证滑块和滑轨的[SliderStyle](#sliderstyle枚举说明)样式,[blockSize](#blocksize10)跟随trackThickness同比例增减。
209
210当style为[SliderStyle](#sliderstyle枚举说明).OutSet时,trackThickness :[blockSize](#blocksize10) = 1 :4,当style为[SliderStyle](#sliderstyle枚举说明).InSet时,trackThickness :[blockSize](#blocksize10) = 5 :3。
211
212trackThickness或[blockSize](#blocksize10)的大小超过Slider组件的宽度或高度时,取默认值。
213
214当[SliderStyle](#sliderstyle枚举说明)设置为OutSet时,尽管trackThickness的大小没超过Slider组件的宽度或高度,但是[blockSize](#blocksize10)超过了,取默认值。
215
216**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
217
218**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
219
220**系统能力:** SystemCapability.ArkUI.ArkUI.Full
221
222**参数:**
223
224| 参数名 | 类型                         | 必填 | 说明                                                         |
225| ------ | ---------------------------- | ---- | ------------------------------------------------------------ |
226| value  | [Length](ts-types.md#length) | 是   | 滑轨的粗细。<br/>默认值:当参数style的值设置[SliderStyle](#sliderstyle枚举说明).OutSet 时为 4.0vp,[SliderStyle](#sliderstyle枚举说明).InSet时为20.0vp。 |
227
228### blockBorderColor<sup>10+</sup>
229
230blockBorderColor(value: ResourceColor)
231
232设置滑块描边颜色。
233
234当滑块形状设置为SliderBlockType.DEFAULT时,blockBorderColor可设置默认圆形滑块描边颜色。
235
236当滑块形状设置为SliderBlockType.IMAGE时,滑块无描边,设置blockBorderColor不生效。
237
238当滑块形状设置为SliderBlockType.SHAPE时,blockBorderColor可设置自定义形状中线的颜色。
239
240**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
241
242**系统能力:** SystemCapability.ArkUI.ArkUI.Full
243
244**参数:**
245
246| 参数名 | 类型                                       | 必填 | 说明                                   |
247| ------ | ------------------------------------------ | ---- | -------------------------------------- |
248| value  | [ResourceColor](ts-types.md#resourcecolor) | 是   | 滑块描边颜色。<br/>默认值:'#00000000' |
249
250### blockBorderWidth<sup>10+</sup>
251
252blockBorderWidth(value: Length)
253
254设置滑块描边粗细。
255
256当滑块形状设置为SliderBlockType.DEFAULT时,blockBorderWidth可设置默认圆形滑块描边粗细。
257
258当滑块形状设置为SliderBlockType.IMAGE时,滑块无描边,设置blockBorderWidth不生效。
259
260当滑块形状设置为SliderBlockType.SHAPE时,blockBorderWidth可设置自定义形状中线的粗细。
261
262**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
263
264**系统能力:** SystemCapability.ArkUI.ArkUI.Full
265
266**参数:**
267
268| 参数名 | 类型                         | 必填 | 说明           |
269| ------ | ---------------------------- | ---- | -------------- |
270| value  | [Length](ts-types.md#length) | 是   | 滑块描边粗细。<br/>**说明:** <br/>设置string类型时,不支持百分比。 |
271
272### stepColor<sup>10+</sup>
273
274stepColor(value: ResourceColor)
275
276设置刻度颜色。
277
278**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
279
280**系统能力:** SystemCapability.ArkUI.ArkUI.Full
281
282**参数:**
283
284| 参数名 | 类型                                       | 必填 | 说明                               |
285| ------ | ------------------------------------------ | ---- | ---------------------------------- |
286| value  | [ResourceColor](ts-types.md#resourcecolor) | 是   | 刻度颜色。<br/>默认值:<br/>`$r('sys.color.ohos_id_color_foreground')`混合<br/>`$r('sys.color.ohos_id_alpha_normal_bg')`透明度的颜色 |
287
288### trackBorderRadius<sup>10+</sup>
289
290trackBorderRadius(value: Length)
291
292设置底板圆角半径。
293
294**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
295
296**系统能力:** SystemCapability.ArkUI.ArkUI.Full
297
298**参数:**
299
300| 参数名 | 类型                         | 必填 | 说明                             |
301| ------ | ---------------------------- | ---- | -------------------------------- |
302| value  | [Length](ts-types.md#length) | 是   | 底板圆角半径。<br/>默认值:<br/>style值为SliderStyle.OutSet时默认值为'2vp'。<br/>style值为SliderStyle.InSet时默认值为'10vp'。<br/>**说明:** <br/>设置string类型时,不支持百分比。设定值小于0时取默认值。 |
303
304### selectedBorderRadius<sup>12+</sup>
305
306selectedBorderRadius(value: Dimension)
307
308设置已滑动部分(高亮)圆角半径。
309
310**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
311
312**系统能力:** SystemCapability.ArkUI.ArkUI.Full
313
314**参数:**
315
316| 参数名 | 类型                         | 必填 | 说明                             |
317| ------ | ---------------------------- | ---- | -------------------------------- |
318| value  | [Dimension](ts-types.md#dimension10)| 是   | 已选择部分的圆角半径。<br/>默认值:当style值为SliderStyle.InSetSliderStyle.OutSet时,跟随底板圆角;当style值为SliderStyle.NONE时,为0。<br/>**说明:** <br/>不支持Percentage类型。设定值小于0时取默认值。 |
319
320### blockSize<sup>10+</sup>
321
322blockSize(value: SizeOptions)
323
324设置滑块大小。
325
326当滑块形状设置为SliderBlockType.DEFAULT时,取宽高的最小值作为圆形半径。
327
328当滑块形状设置为SliderBlockType.IMAGE时,用于设置图片的尺寸大小,图片采用ObjectFit.Cover策略进行缩放。
329
330当滑块形状设置为SliderBlockType.SHAPE时,用于设置自定义形状的大小,自定义形状也会采用ObjectFit.Cover策略进行缩放。
331
332**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
333
334**系统能力:** SystemCapability.ArkUI.ArkUI.Full
335
336**参数:**
337
338| 参数名 | 类型                                   | 必填 | 说明                                                         |
339| ------ | -------------------------------------- | ---- | ------------------------------------------------------------ |
340| value  | [SizeOptions](ts-types.md#sizeoptions) | 是   | 滑块大小。<br/>默认值:当参数style的值设置为[SliderStyle](#sliderstyle枚举说明).OutSet时为{width: 18, height: 18},当参数style的值设置为[SliderStyle](#sliderstyle枚举说明).InSet时为{width: 12, height: 12},当参数style的值设置为[SliderStyle](#sliderstyle枚举说明).NONE时为,此字段不生效。<br/>当设置的blockSize的宽高值不相等时,取较小值的尺寸,当设置的宽高值中有一个或两个都小于等于0的时候,取默认值。 |
341
342### blockStyle<sup>10+</sup>
343
344blockStyle(value: SliderBlockStyle)
345
346设置滑块形状参数。
347
348**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
349
350**系统能力:** SystemCapability.ArkUI.ArkUI.Full
351
352**参数:**
353
354| 参数名 | 类型                                            | 必填 | 说明                                                         |
355| ------ | ----------------------------------------------- | ---- | ------------------------------------------------------------ |
356| value  | [SliderBlockStyle](#sliderblockstyle10对象说明) | 是   | 滑块形状参数。<br/>默认值:SliderBlockType.DEFAULT,滑块形状为圆形。 |
357
358### stepSize<sup>10+</sup>
359
360stepSize(value: Length)
361
362设置刻度大小(直径)。当值为0时,刻度点不显示,当值小于0时,取默认值。
363
364**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
365
366**系统能力:** SystemCapability.ArkUI.ArkUI.Full
367
368**参数:**
369
370| 参数名 | 类型                         | 必填 | 说明                                  |
371| ------ | ---------------------------- | ---- | ------------------------------------- |
372| value  | [Length](ts-types.md#length) | 是   | 刻度大小(直径)。 <br/>默认值:'4vp'<br/>取值范围:[0, [trackThickness](#trackthickness8)) |
373
374### minLabel<sup>(deprecated)</sup>
375
376minLabel(value: string)
377
378设置最小值。
379
380从API Version 9开始废弃,使用min替代。
381
382**系统能力:** SystemCapability.ArkUI.ArkUI.Full
383
384**参数:**
385
386| 参数名 | 类型   | 必填 | 说明     |
387| ------ | ------ | ---- | -------- |
388| value  | string | 是   | 最小值。 |
389
390### maxLabel<sup>(deprecated)</sup>
391
392maxLabel(value: string)
393
394设置最大值。
395
396从API Version 9开始废弃,使用max替代。
397
398**系统能力:** SystemCapability.ArkUI.ArkUI.Full
399
400**参数:**
401
402| 参数名 | 类型   | 必填 | 说明     |
403| ------ | ------ | ---- | -------- |
404| value  | string | 是   | 最大值。 |
405
406### sliderInteractionMode<sup>12+</sup>
407
408sliderInteractionMode(value: SliderInteraction)
409
410设置用户与滑动条组件交互方式。
411
412**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
413
414**系统能力:** SystemCapability.ArkUI.ArkUI.Full
415
416**参数:**
417
418| 参数名 | 类型                                              | 必填 | 说明                                                         |
419| ------ | ------------------------------------------------- | ---- | ------------------------------------------------------------ |
420| value  | [SliderInteraction](#sliderinteraction12枚举说明) | 是   | 用户与滑动条组件交互方式。 <br /> 默认值:SliderInteraction.SLIDE_AND_CLICK。 |
421
422### minResponsiveDistance<sup>12+</sup>
423
424minResponsiveDistance(value: number)
425
426设置滑动响应的最小距离。
427
428**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
429
430**系统能力:** SystemCapability.ArkUI.ArkUI.Full
431
432**参数:**
433
434| 参数名 | 类型    | 必填 | 说明                                       |
435| ------ | ------- | ---- | ------------------------------------------ |
436| value  | number | 是   | 设置滑动响应的最小距离,滑动超过此距离后滑块才开始滑动。<br/>**说明:** <br/>单位与参数[min](#slideroptions对象说明)和[max](#slideroptions对象说明)一致。<br/>当value小于0、大于MAX-MIN或非法值时,取默认值。<br/>默认值:0  |
437
438### contentModifier<sup>12+</sup>
439
440contentModifier(modifier: ContentModifier\<SliderConfiguration>)
441
442定制Slider内容区的方法。
443
444**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
445
446**系统能力:** SystemCapability.ArkUI.ArkUI.Full
447
448**参数:**
449
450| 参数名 | 类型                                          | 必填 | 说明                                             |
451| ------ | --------------------------------------------- | ---- | ------------------------------------------------ |
452| modifier  | [ContentModifier\<SliderConfiguration>](#sliderconfiguration12对象说明) | 是   | 在Slider组件上,定制内容区的方法。<br/>modifier:内容修改器,开发者需要自定义class实现ContentModifier接口。 |
453
454>  **说明:**
455>
456>  - 设置了contentModifier后,自定义区域内点击和手势滑动均不会触发原Slider组件的onChange事件。
457>  - 仅当调用triggerChange函数且传递正确的参数值时,才可以触发原Slider组件的onChange事件。
458
459### slideRange<sup>12+</sup>
460
461slideRange(value: SlideRange)
462
463设置有效滑动区间。
464
465**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
466
467**系统能力:** SystemCapability.ArkUI.ArkUI.Full
468
469**参数:**
470
471| 参数名 | 类型                                | 必填 | 说明             |
472| ------ | ----------------------------------- | ---- | ---------------- |
473| value  | [SlideRange](#sliderange12对象说明) | 是   | 设置有效滑动区间 |
474
475### enableHapticFeedback<sup>18+</sup>
476
477enableHapticFeedback(enabled: boolean)
478
479设置是否开启触控反馈。
480
481开启触控反馈时,需要在工程的[module.json5](../../../quick-start/module-configuration-file.md)中配置requestPermissions字段开启振动权限,配置如下:
482
483```json
484"requestPermissions": [
485  {
486    "name": "ohos.permission.VIBRATE"
487  }
488 ]
489```
490
491**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
492
493**系统能力:** SystemCapability.ArkUI.ArkUI.Full
494
495**参数:**
496
497| 参数名 | 类型                                          | 必填  | 说明                                                                                  |
498| ------ | --------------------------------------------- |-----|-------------------------------------------------------------------------------------|
499| enabled  | boolean | 是   | 设置是否开启触控反馈。<br/>默认值:true,true表示开启触控反馈,false表示不开启触控反馈。|
500
501### digitalCrownSensitivity<sup>18+</sup>
502
503digitalCrownSensitivity(sensitivity: Optional\<CrownSensitivity>)
504
505设置旋转表冠的灵敏度。
506
507**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
508
509**系统能力:** SystemCapability.ArkUI.ArkUI.Full
510
511**参数:**
512
513| 参数名      | 类型                                                         | 必填 | 说明                                                    |
514| ----------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------- |
515| sensitivity | [Optional\<CrownSensitivity>](ts-appendix-enums.md#crownsensitivity18) | 是   | 旋转表冠的灵敏度。<br />默认值:CrownSensitivity.MEDIUM |
516
517### prefix<sup>20+</sup>
518
519prefix(content: ComponentContent, options?: SliderPrefixOptions)
520
521设置滑动条的前缀。
522
523**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
524
525**系统能力:** SystemCapability.ArkUI.ArkUI.Full
526
527**参数:**
528
529| 参数名      | 类型                                                         | 必填 | 说明                                                    |
530| ----------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------- |
531| content | [ComponentContent](../js-apis-arkui-ComponentContent.md) | 是   | 自定义组件内容,用于定义滑块前缀的可视化内容,该内容会显示在滑块的起始位置。 |
532| options | [SliderPrefixOptions](#sliderprefixoptions20) | 否   | 滑块前缀的配置选项,用于设置与无障碍功能相关的属性。 |
533
534### suffix<sup>20+</sup>
535
536suffix(content: ComponentContent, options?: SliderSuffixOptions)
537
538设置滑动条的后缀。
539
540**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
541
542**系统能力:** SystemCapability.ArkUI.ArkUI.Full
543
544**参数:**
545
546| 参数名      | 类型                                                         | 必填 | 说明                                                    |
547| ----------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------- |
548| content | [ComponentContent](../js-apis-arkui-ComponentContent.md)    | 是   | 自定义组件内容,用于定义滑块后缀的可视化内容,该内容会显示在滑块的结束位置。 |
549| options | [SliderSuffixOptions](#slidersuffixoptions20) | 否   | 滑块后缀的配置选项,用于设置与无障碍功能相关的属性。 |
550
551### showSteps<sup>20+</sup>
552
553showSteps(value: boolean, options?: SliderShowStepOptions)
554
555设置当前是否显示步长刻度值。
556
557支持设置每个刻度点的无障碍文本信息,不设置时默认使用当前刻度点的值作为无障碍文本信息。
558
559当显示步长时,设置的刻度点无障碍文本信息生效。
560
561**卡片能力:** 从API version 20开始,该接口支持在ArkTS卡片中使用。
562
563**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
564
565**系统能力:** SystemCapability.ArkUI.ArkUI.Full
566
567**参数:**
568
569| 参数名      | 类型                                                         | 必填 | 说明                                                    |
570| ----------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------- |
571| value | boolean | 是 | 当前是否显示步长刻度值。值为true时显示刻度值,值为false时不显示刻度值。<br />默认值:false |
572| options | [SliderShowStepOptions](#slidershowstepoptions20) | 否 | 刻度点无障碍文本的配置选项,用于设置与无障碍功能相关的属性。<br/>默认值:null |
573
574## SliderCustomContentOptions<sup>20+</sup>
575
576Slider前后缀组件无障碍信息参数。
577
578**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
579
580**系统能力:** SystemCapability.ArkUI.ArkUI.Full
581
582| 名称                     | 类型        | 只读 | 可选 | 说明                                                         |
583| ------------------------ | ----------- | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ |
584| accessibilityText        | [ResourceStr](ts-types.md#resourcestr) | 否   | 是  | 用于提供辅助功能的文本,供屏幕阅读器等工具读取,增强无障碍功能。 <br/>默认值:"" |
585| accessibilityDescription | [ResourceStr](ts-types.md#resourcestr) | 否   | 是  | 用于提供辅助功能的详细描述,描述滑块前缀或后缀的功能或用途,供屏幕阅读器等工具使用。 <br/>默认值为“单指双击即可执行”。 |
586| accessibilityLevel       | string      | 否   | 是  | 用于控制某个组件是否可被无障碍辅助服务所识别。<br>支持的值为:<br>"auto":当前组件会转换为“yes”。<br>"yes":当前组件可被无障碍辅助服务所识别。<br>"no":当前组件不可被无障碍辅助服务所识别。<br>"no-hide-descendants":当前组件及其所有子组件不可被无障碍辅助服务所识别。<br>默认值:"auto"。 |
587| accessibilityGroup       | boolean     | 否   | 是  | 用于标识该元素是否属于一个无障碍的组,帮助屏幕阅读器等工具将相关元素进行分组处理。设置为true时表示该组件及其所有子组件为一整个可以选中的组件,无障碍服务将不再关注其子组件内容;设置为false表示不启用无障碍分组。<br/>默认值:false |
588
589## SliderPrefixOptions<sup>20+</sup>
590
591Slider前缀组件无障碍信息参数。
592
593**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
594
595**系统能力:** SystemCapability.ArkUI.ArkUI.Full
596
597提供前缀组件的无障碍信息,继承自[SliderCustomContentOptions](#slidercustomcontentoptions20)。
598
599## SliderSuffixOptions<sup>20+</sup>
600
601Slider后缀组件无障碍信息参数。
602
603**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
604
605**系统能力:** SystemCapability.ArkUI.ArkUI.Full
606
607提供后缀组件的无障碍信息,继承自[SliderCustomContentOptions](#slidercustomcontentoptions20)。
608
609## SliderStepItemAccessibility<sup>20+</sup>
610
611Slider刻度点的无障碍文本信息。
612
613**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
614
615**系统能力:** SystemCapability.ArkUI.ArkUI.Full
616
617| 名称                     | 类型        | 只读 | 可选 | 说明                                                         |
618| ------------------------ | ----------- | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ |
619| text | [ResourceStr](ts-types.md#resourcestr) | 否 | 是 | 用于提供辅助功能的文本,供屏幕阅读器等工具读取,增强无障碍功能。 <br/>默认值:"" |
620
621## SliderShowStepOptions<sup>20+</sup>
622
623Slider刻度点的无障碍文本信息映射集。
624
625**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
626
627**系统能力:** SystemCapability.ArkUI.ArkUI.Full
628
629| 名称                     | 类型        | 只读 | 可选 | 说明                                                         |
630| ------------------------ | ----------- | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ |
631| stepsAccessibility | Map<number, [SliderStepItemAccessibility](#sliderstepitemaccessibility20)> | 否 | 是 | 用于设置刻度点提供辅助功能文本,供屏幕阅读器等工具读取,增强无障碍功能。 <br/>Key取值范围:[0, INT32_MAX],当Key设定为负数和小数时,设定项不生效。 <br/>默认值:{} |
632
633## SliderBlockStyle<sup>10+</sup>对象说明
634
635Slider组件滑块形状参数。
636
637**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
638
639**系统能力:** SystemCapability.ArkUI.ArkUI.Full
640
641| 名称  | 类型                                                         | 只读 | 可选 | 说明                                                         |
642| ----- | ------------------------------------------------------------ | ---- | ---- | ------------------------------------------------------------ |
643| type  | [SliderBlockType](#sliderblocktype10枚举说明)                | 否   | 否   | 设置滑块形状。<br/>默认值:SliderBlockType.DEFAULT,使用圆形滑块。 |
644| image | [ResourceStr](ts-types.md#resourcestr)                       | 否   | 是   | 设置滑块图片资源。<br />图片显示区域大小由blockSize属性控制,请勿输入尺寸过大的图片。 |
645| shape | [Circle](ts-drawing-components-circle.md)&nbsp;\|&nbsp;[Ellipse](ts-drawing-components-ellipse.md)&nbsp;\|&nbsp;[Path](ts-drawing-components-path.md)&nbsp;\|&nbsp;[Rect](ts-drawing-components-rect.md)&nbsp; | 否   | 是   | 设置滑块使用的自定义形状。                                   |
646
647## SliderBlockType<sup>10+</sup>枚举说明
648
649Slider组件滑块形状枚举。
650
651**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
652
653**系统能力:** SystemCapability.ArkUI.ArkUI.Full
654
655| 名称    | 值 | 说明                 |
656| ------- | -- | ---------------------- |
657| DEFAULT | 0 | 使用默认滑块(圆形)。   |
658| IMAGE   | 1 | 使用图片资源作为滑块。   |
659| SHAPE   | 2 | 使用自定义形状作为滑块。 |
660
661## SliderInteraction<sup>12+</sup>枚举说明
662
663用户与滑动条组件交互方式。
664
665**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
666
667**系统能力:** SystemCapability.ArkUI.ArkUI.Full
668
669| 名称     | 值 |说明                          |
670| ------ | -- | ----------------------------- |
671| SLIDE_AND_CLICK | 0 | 用户可拖拽滑块或者点击滑轨使滑块移动,鼠标或手指按下即发生移动。|
672| SLIDE_ONLY | 1 | 禁止用户通过点击滑轨使滑块移动。|
673| SLIDE_AND_CLICK_UP | 2 |用户可拖拽滑块或者点击滑轨使滑块移动,当鼠标或手指抬起时,若与屏幕按压位置一致,则触发移动。|
674
675## SlideRange<sup>12+</sup>对象说明
676
677定义SlideRange中使用的回调类型。
678
679**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
680
681**系统能力:** SystemCapability.ArkUI.ArkUI.Full
682
683| 名称 | 类型     | 只读 | 可选 | 说明           |
684|----|--------| ---- |--------------|--------------|
685| from | number | 否 | 是 | 设置有效滑动区间的开始。 |
686| to | number | 否 | 是 | 设置有效滑动区间的结束。 |
687
688>  **说明:**
689>
690>  - 当前仅当MIN<=from<=to<=MAX时该接口生效(MIN和MAX不依赖于其设置的值,而取决于其实际生效的值)。
691>  - 可只设置from或者to,也可以同时设置from和to。
692>  - 当接口生效且设置的from处于紧邻的step整数倍的值之间,则from实际取左区间step整数倍的那个值或者MIN作为修正后的值。
693>  - 当接口生效且设置的to处于紧邻的step整数倍的值之间,则to实际取右区间step整数倍的那个值或者MAX作为修正后的值。
694>  - 在from和to取修正值后, 当value是undefined或null时,其取值与from一致; 当value是数值型且value <= from,则取from; 当value > to,则取to。
695
696## 事件
697
698除支持[通用事件](ts-component-general-events.md)外,还支持以下事件:
699
700### onChange
701
702onChange(callback:&nbsp;(value:&nbsp;number,&nbsp;mode:&nbsp;SliderChangeMode)&nbsp;=&gt;&nbsp;void)
703
704Slider拖动或点击时触发事件回调。
705
706Begin和End状态当手势点击时都会触发,Moving和Click状态当value值发生变化时触发。
707
708当连贯动作为拖动动作时,不触发Click状态。
709
710**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
711
712**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
713
714**系统能力:** SystemCapability.ArkUI.ArkUI.Full
715
716**参数:**
717
718| 参数名 | 类型                                          | 必填 | 说明                                                         |
719| ------ | --------------------------------------------- | ---- | ------------------------------------------------------------ |
720| value  | number                                        | 是   | 当前滑动进度值,变化范围为对应步长steps数组。若返回值有小数,可使用number.toFixed()方法将数据处理为预期的精度。 |
721| mode   | [SliderChangeMode](#sliderchangemode枚举说明) | 是   | 事件触发的相关状态值。                                       |
722
723## SliderChangeMode枚举说明
724
725滑块的状态值。包括按下、拖动、离开以及点击滑动条使滑块位置时。
726
727**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
728
729**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
730
731**系统能力:** SystemCapability.ArkUI.ArkUI.Full
732
733| 名称 | 值 | 说明 |
734| -------- | -------- | -------- |
735| Begin | 0 | 手势/鼠标接触或者按下滑块。 |
736| Moving | 1 | 正在拖动滑块过程中。 |
737| End | 2 | 手势/鼠标离开滑块。<br/>**说明:** <br/>异常值恢复成默认值时触发,即value设置小于min或大于max。 |
738| Click<sup>8+</sup> | 3    | 点击滑动条使滑块位置移动。 |
739
740## SliderConfiguration<sup>12+</sup>对象说明
741
742开发者需要自定义class实现ContentModifier接口。继承自[CommonConfiguration](ts-universal-attributes-content-modifier.md#commonconfigurationt)。
743
744**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
745
746**系统能力:** SystemCapability.ArkUI.ArkUI.Full
747
748| 名称  | 类型    | 只读  | 可选  | 说明              |
749| ------ | ------ | ---------------- | ---------------- | ---------------- |
750| value | number | 否 | 否 | 当前进度值。 |
751| min | number | 否 | 否 | 最小值。 |
752| max | number | 否 | 否 | 最大值。 |
753| step | number | 否 | 否 | Slider滑动步长。 |
754| triggerChange | [SliderTriggerChangeCallback](#slidertriggerchangecallback12) | 否 | 否 | 触发Slider变化。 |
755
756## SliderTriggerChangeCallback<sup>12+</sup>
757
758type SliderTriggerChangeCallback = (value: number, mode: SliderChangeMode) => void
759
760定义SliderConfiguration中使用的回调类型。
761
762**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
763
764**系统能力:** SystemCapability.ArkUI.ArkUI.Full
765
766**参数:**
767
768| 参数名 | 类型    | 必填 | 说明              |
769| ------ | ------ | ---------------- | ---------------- |
770| value | number | 是 | 设置当前的进度值。<br/>取值范围:[[min](#slideroptions对象说明)-[max](#slideroptions对象说明)] |
771| mode | [SliderChangeMode](#sliderchangemode枚举说明) | 是 | 设置事件触发的相关状态值。 |
772
773## 示例
774
775### 示例1(滑动条基础样式)
776
777该示例通过配置style、showTips、showSteps控制气泡、刻度值、滑块和滑轨的显示。
778
779```ts
780// xxx.ets
781@Entry
782@Component
783struct SliderExample {
784  @State outSetValueOne: number = 40;
785  @State inSetValueOne: number = 40;
786  @State noneValueOne: number = 40;
787  @State outSetValueTwo: number = 40;
788  @State inSetValueTwo: number = 40;
789  @State vOutSetValueOne: number = 40;
790  @State vInSetValueOne: number = 40;
791  @State vOutSetValueTwo: number = 40;
792  @State vInSetValueTwo: number = 40;
793
794  build() {
795    Column({ space: 8 }) {
796      Text('outset slider').fontSize(9).fontColor(0xCCCCCC).width('90%').margin(15)
797      Row() {
798        Slider({
799          value: this.outSetValueOne,
800          min: 0,
801          max: 100,
802          style: SliderStyle.OutSet
803        })
804          .showTips(true)
805          .onChange((value: number, mode: SliderChangeMode) => {
806            this.outSetValueOne = value;
807            console.info('value:' + value + 'mode:' + mode.toString());
808          })
809        // toFixed(0)将滑动条返回值处理为整数精度
810        Text(this.outSetValueOne.toFixed(0)).fontSize(12)
811      }
812      .width('80%')
813      Row() {
814        Slider({
815          value: this.outSetValueTwo,
816          step: 10,
817          style: SliderStyle.OutSet
818        })
819          .showSteps(true)
820          .onChange((value: number, mode: SliderChangeMode) => {
821            this.outSetValueTwo = value;
822            console.info('value:' + value + 'mode:' + mode.toString());
823          })
824        Text(this.outSetValueTwo.toFixed(0)).fontSize(12)
825      }
826      .width('80%')
827
828      Text('inset slider').fontSize(9).fontColor(0xCCCCCC).width('90%').margin(15)
829      Row() {
830        Slider({
831          value: this.inSetValueOne,
832          min: 0,
833          max: 100,
834          style: SliderStyle.InSet
835        })
836          .blockColor('#191970')
837          .trackColor('#ADD8E6')
838          .selectedColor('#4169E1')
839          .showTips(true)
840          .onChange((value: number, mode: SliderChangeMode) => {
841            this.inSetValueOne = value;
842            console.info('value:' + value + 'mode:' + mode.toString());
843          })
844        Text(this.inSetValueOne.toFixed(0)).fontSize(12)
845      }
846      .width('80%')
847      Row() {
848        Slider({
849          value: this.inSetValueTwo,
850          step: 10,
851          style: SliderStyle.InSet
852        })
853          .blockColor('#191970')
854          .trackColor('#ADD8E6')
855          .selectedColor('#4169E1')
856          .showSteps(true)
857          .onChange((value: number, mode: SliderChangeMode) => {
858            this.inSetValueTwo = value;
859            console.info('value:' + value + 'mode:' + mode.toString());
860          })
861        Text(this.inSetValueTwo.toFixed(0)).fontSize(12)
862      }
863      .width('80%')
864
865      Text('none slider').fontSize(9).fontColor(0xCCCCCC).width('90%').margin(15)
866      Row() {
867        Slider({
868          value: this.noneValueOne,
869          min: 0,
870          max: 100,
871          style: SliderStyle.NONE
872        })
873          .blockColor('#191970')
874          .trackColor('#ADD8E6')
875          .selectedColor('#4169E1')
876          .showTips(true)
877          .onChange((value: number, mode: SliderChangeMode) => {
878            this.noneValueOne = value;
879            console.info('value:' + value + 'mode:' + mode.toString());
880          })
881        Text(this.noneValueOne.toFixed(0)).fontSize(12)
882      }
883      .width('80%')
884
885      Row() {
886        Column() {
887          Text('vertical outset slider').fontSize(9).fontColor(0xCCCCCC).width('50%').margin(15)
888          Row() {
889            Text().width('10%')
890            Slider({
891              value: this.vOutSetValueOne,
892              style: SliderStyle.OutSet,
893              direction: Axis.Vertical
894            })
895              .blockColor('#191970')
896              .trackColor('#ADD8E6')
897              .selectedColor('#4169E1')
898              .showTips(true)
899              .onChange((value: number, mode: SliderChangeMode) => {
900                this.vOutSetValueOne = value;
901                console.info('value:' + value + 'mode:' + mode.toString());
902              })
903            Slider({
904              value: this.vOutSetValueTwo,
905              step: 10,
906              style: SliderStyle.OutSet,
907              direction: Axis.Vertical
908            })
909              .blockColor('#191970')
910              .trackColor('#ADD8E6')
911              .selectedColor('#4169E1')
912              .showSteps(true)
913              .onChange((value: number, mode: SliderChangeMode) => {
914                this.vOutSetValueTwo = value;
915                console.info('value:' + value + 'mode:' + mode.toString());
916              })
917          }
918        }.width('50%').height(300)
919
920        Column() {
921          Text('vertical inset slider').fontSize(9).fontColor(0xCCCCCC).width('50%').margin(15)
922          Row() {
923            Slider({
924              value: this.vInSetValueOne,
925              style: SliderStyle.InSet,
926              direction: Axis.Vertical,
927              reverse: true // 竖向的Slider默认是上端是min值,下端是max值,因此想要从下往上滑动,需要设置reverse为true
928            })
929              .showTips(true)
930              .onChange((value: number, mode: SliderChangeMode) => {
931                this.vInSetValueOne = value;
932                console.info('value:' + value + 'mode:' + mode.toString());
933              })
934            Slider({
935              value: this.vInSetValueTwo,
936              step: 10,
937              style: SliderStyle.InSet,
938              direction: Axis.Vertical,
939              reverse: true
940            })
941              .showSteps(true)
942              .onChange((value: number, mode: SliderChangeMode) => {
943                this.vInSetValueTwo = value;
944                console.info('value:' + value + 'mode:' + mode.toString());
945              })
946          }
947        }.width('50%').height(300)
948      }
949    }.width('100%')
950  }
951}
952```
953
954![slider](figures/slider.gif)
955
956### 示例2(设置滑动条样式)
957
958该示例通过blockBorderColor、blockSize、blockBorderWidth、blockStyle设置滑块的样式,通过stepSize、stepColor设置刻度值的样式,通过trackBorderRadius设置底板的圆角,通过selectedBorderRadius设置已滑动部分的圆角。
959
960```ts
961@Entry
962@Component
963struct SliderExample {
964  @State tipsValue: number = 40;
965
966  build() {
967    Column({ space: 8 }) {
968      Text('block').fontSize(9).fontColor(0xCCCCCC).margin(15).width('90%')
969      Slider({ style: SliderStyle.OutSet, value: 40 })
970        .blockSize({ width: 40, height: 40 })
971        .blockBorderColor(Color.Red)
972        .blockBorderWidth(5)
973      Divider()
974      Text('step').fontSize(9).fontColor(0xCCCCCC).margin(15).width('90%')
975      Slider({ style: SliderStyle.InSet, value: 40, step: 10 })
976        .showSteps(true)
977        .stepSize(8)
978        .stepColor(Color.Yellow)
979      Divider()
980      Text('track').fontSize(9).fontColor(0xCCCCCC).margin(15).width('90%')
981      Slider({ style: SliderStyle.InSet, value: 40 })
982        .trackBorderRadius(2)
983      Divider()
984      Text('selected').fontSize(9).fontColor(0xCCCCCC).margin(15).width('90%')
985      Slider({ style: SliderStyle.InSet, value: 40 })
986        .selectedBorderRadius(2)
987      Divider()
988      Text('blockStyle').fontSize(9).fontColor(0xCCCCCC).margin(15).width('90%')
989      Slider({ style: SliderStyle.OutSet, value: 40 })
990        .blockStyle({ type: SliderBlockType.DEFAULT })
991      Slider({ style: SliderStyle.OutSet, value: 40 })
992        .blockStyle({ type: SliderBlockType.IMAGE, image: $r('sys.media.ohos_app_icon') })
993      Slider({ style: SliderStyle.OutSet, value: 40 })
994        .blockSize({ width: '60px', height: '60px' })
995        .blockColor(Color.Red)
996        .blockStyle({ type: SliderBlockType.SHAPE, shape: new Path({ commands: 'M60 60 M30 30 L15 56 L45 56 Z' }) })
997      Divider()
998      Text('tips').fontSize(9).fontColor(0xCCCCCC).margin(15).width('90%')
999      Slider({ style: SliderStyle.InSet, value: this.tipsValue })
1000        .showTips(true, this.tipsValue.toFixed())
1001        .onChange(value => {
1002          this.tipsValue = value;
1003        })
1004    }
1005  }
1006}
1007```
1008
1009![slider_2](figures/slider_2.png)
1010
1011
1012
1013### 示例3(自定义滑动条)
1014
1015该示例实现了Slider组件通过样式Builder定制内容区。点击增加按钮,进度条会按照原Slider设置的步长增加,反之点减少按钮进度条会减少,并触发原组件的onChange事件。
1016
1017```ts
1018// xxx.ets
1019
1020@Builder
1021function buildSlider(config: SliderConfiguration) {
1022  Row() {
1023    Column({ space: 30 }) {
1024      Progress({ value: config.value, total: config.max, type: ProgressType.Ring })
1025        .margin({ top: 20 })
1026
1027      Button('增加')
1028        .onClick(() => {
1029          config.value = config.value + config.step;
1030          config.triggerChange(config.value, SliderChangeMode.Click);
1031        })
1032        .width(100)
1033        .height(25)
1034        .fontSize(10)
1035        .enabled(config.value < config.max)
1036
1037      Button('减少')
1038        .onClick(() => {
1039          config.value = config.value - config.step;
1040          config.triggerChange(config.value, SliderChangeMode.Click);
1041        })
1042        .width(100)
1043        .height(25)
1044        .fontSize(10)
1045        .enabled(config.value > config.min)
1046
1047      Slider({
1048        value: config.value,
1049        min: config.min,
1050        max: config.max,
1051        step: config.step,
1052      })
1053        .width(100)
1054        .visibility((config.contentModifier as MySliderStyle).showSlider ? Visibility.Visible : Visibility.Hidden)
1055        .showSteps(true)
1056        .onChange((value: number, mode: SliderChangeMode) => {
1057          config.triggerChange(value, mode);
1058        })
1059      Text('当前状态:' + ((config.contentModifier as MySliderStyle).sliderChangeMode == 0 ? "Begin"
1060        : ((config.contentModifier as MySliderStyle).sliderChangeMode == 1 ? "Moving"
1061          : ((config.contentModifier as MySliderStyle).sliderChangeMode == 2 ? "End"
1062            : ((config.contentModifier as MySliderStyle).sliderChangeMode == 3 ? "Click" : "无")))))
1063        .fontSize(10)
1064      Text('进度值:' + config.value)
1065        .fontSize(10)
1066      Text('最小值:' + config.min)
1067        .fontSize(10)
1068      Text('最大值:' + config.max)
1069        .fontSize(10)
1070      Text('步长:' + config.step)
1071        .fontSize(10)
1072    }
1073    .width('80%')
1074
1075  }
1076  .width('100%')
1077}
1078
1079class MySliderStyle implements ContentModifier<SliderConfiguration> {
1080  showSlider: boolean = true;
1081  sliderChangeMode: number = 0;
1082
1083  constructor(showSlider: boolean, sliderChangeMode: number) {
1084    this.showSlider = showSlider;
1085    this.sliderChangeMode = sliderChangeMode;
1086  }
1087
1088  applyContent(): WrappedBuilder<[SliderConfiguration]> {
1089    return wrapBuilder(buildSlider);
1090  }
1091}
1092
1093
1094@Entry
1095@Component
1096struct SliderExample {
1097  @State showSlider: boolean = true;
1098  @State sliderValue: number = 0;
1099  @State sliderMin: number = 10;
1100  @State sliderMax: number = 100;
1101  @State sliderStep: number = 20;
1102  @State sliderChangeMode: number = 0;
1103
1104  build() {
1105    Column({ space: 8 }) {
1106
1107      Row() {
1108        Slider({
1109          value: this.sliderValue,
1110          min: this.sliderMin,
1111          max: this.sliderMax,
1112          step: this.sliderStep,
1113        })
1114          .showSteps(true)
1115          .onChange((value: number, mode: SliderChangeMode) => {
1116            this.sliderValue = value;
1117            this.sliderChangeMode = mode;
1118            console.info('【SliderLog】value:' + value + 'mode:' + mode.toString());
1119          })
1120          .contentModifier(new MySliderStyle(this.showSlider, this.sliderChangeMode))
1121
1122      }
1123      .width('100%')
1124
1125    }.width('100%')
1126  }
1127}
1128```
1129
1130![slider_3](figures/slider_builder.gif)
1131
1132### 示例4(设置滑动条渐变色)
1133
1134该示例通过colorGradient设置滑动条渐变色,通过focusable、defaultFocus和focusOnTouch设置滑动条支持表冠操作。
1135
1136```ts
1137// xxx.ets
1138@Entry
1139@Component
1140struct SliderExample {
1141  @State inSetValueOne: number = 60
1142  @State colorGradient: LinearGradient = new LinearGradient([{ color: "#FF0000FF", offset: 0 }, { color: "#FFFF0000", offset: 1 }])
1143  @State sensitivity: CrownSensitivity | undefined | null = CrownSensitivity.MEDIUM
1144  scroller: Scroller = new Scroller()
1145
1146  getIntegerDigits(num: number): string {
1147    let numRound = Math.round(num);
1148    return numRound.toString();
1149  }
1150
1151  build() {
1152    Column() {
1153      Scroll(this.scroller){
1154        Column() {
1155          Row() {
1156            Stack({ alignContent: Alignment.Top }) {
1157              Slider({
1158                value: this.inSetValueOne,
1159                min: 0,
1160                max: 100,
1161                style: SliderStyle.NONE,
1162                direction: Axis.Vertical,
1163                reverse: true
1164              })
1165                .focusable(true)
1166                .defaultFocus(true)
1167                .focusOnTouch(true)
1168                .digitalCrownSensitivity(this.sensitivity)
1169                .trackColor("#26FFFFFF")
1170                .trackThickness(52)
1171                .selectedColor(this.colorGradient)
1172                .onChange((value: number, mode: SliderChangeMode) => {
1173                  this.inSetValueOne = value
1174                })
1175            }
1176            .height(233 - 66)
1177            .width(52)
1178            .margin({ top: 33, bottom: 33, left: 56 })
1179            Column() {
1180              Text('音量')
1181                .fontSize(19)
1182                .fontColor("#A9FFFFFF")
1183                .fontWeight(500)
1184                .textAlign(TextAlign.Start)
1185                .margin({ left: 20 })
1186              Row() {
1187                Text(this.getIntegerDigits(this.inSetValueOne))
1188                  .fontSize(52)
1189                  .fontColor("#FFFFFFFF")
1190                  .fontWeight(700)
1191                  .textAlign(TextAlign.Start)
1192                  .margin({ left: 20 })
1193                Text('%')
1194                  .fontSize(19)
1195                  .fontColor("#FFFFFFFF")
1196                  .fontWeight(500)
1197                  .textAlign(TextAlign.Start)
1198                  .margin({ left: 2 })
1199              }
1200            }.alignItems(HorizontalAlign.Start)
1201          }
1202          .width(233)
1203          .height(233)
1204          .borderRadius(116.5)
1205          .backgroundColor(Color.Black)
1206        }
1207      }
1208    }.width('100%')
1209  }
1210}
1211```
1212
1213![slider_4](figures/slider_crown.gif)
1214
1215
1216### 示例5(滑动条设置前后缀内容)
1217
1218该示例实现了Slider组件通过prefix、suffix属性设置滑动条的前后缀内容,定制其内容区以及无障碍属性。设置无障碍属性后,屏幕阅读器将以设置的无障碍内容进行朗读。
1219
1220```ts
1221// xxx.ets
1222import { ComponentContent } from '@kit.ArkUI';
1223
1224class NodeParams {
1225  param: ResourceStr = ""
1226
1227  constructor(param: ResourceStr) {
1228    this.param = param;
1229  }
1230}
1231
1232@Builder
1233function textBuilder(params: NodeParams) {
1234  Text(params.param)
1235    .fontSize($r('sys.float.Caption_L'))
1236    .clip(true)
1237    .textAlign(TextAlign.Center)
1238    .fontColor(Color.Black)
1239}
1240
1241@Entry
1242@Component
1243struct SliderExample {
1244  private pre: string = '低';
1245  private suf: string = '高';
1246  private uiContext: UIContext = this.getUIContext();
1247
1248  private preNode1: ComponentContent<NodeParams> = new ComponentContent(this.uiContext, wrapBuilder(textBuilder), new NodeParams(this.pre));
1249  private sufNode1: ComponentContent<NodeParams> = new ComponentContent(this.uiContext, wrapBuilder(textBuilder), new NodeParams(this.suf));
1250  private preNode2: ComponentContent<NodeParams> = new ComponentContent(this.uiContext, wrapBuilder(textBuilder), new NodeParams(this.pre));
1251  private sufNode2: ComponentContent<NodeParams> = new ComponentContent(this.uiContext, wrapBuilder(textBuilder), new NodeParams(this.suf));
1252  private preNode3: ComponentContent<NodeParams> = new ComponentContent(this.uiContext, wrapBuilder(textBuilder), new NodeParams(this.pre));
1253  private sufNode3: ComponentContent<NodeParams> = new ComponentContent(this.uiContext, wrapBuilder(textBuilder), new NodeParams(this.suf));
1254  private preNode4: ComponentContent<NodeParams> = new ComponentContent(this.uiContext, wrapBuilder(textBuilder), new NodeParams(this.pre));
1255  private sufNode4: ComponentContent<NodeParams> = new ComponentContent(this.uiContext, wrapBuilder(textBuilder), new NodeParams(this.suf));
1256  private preNode5: ComponentContent<NodeParams> = new ComponentContent(this.uiContext, wrapBuilder(textBuilder), new NodeParams(this.pre));
1257  private sufNode5: ComponentContent<NodeParams> = new ComponentContent(this.uiContext, wrapBuilder(textBuilder), new NodeParams(this.suf));
1258  private preNode6: ComponentContent<NodeParams> = new ComponentContent(this.uiContext, wrapBuilder(textBuilder), new NodeParams(this.pre));
1259  private sufNode6: ComponentContent<NodeParams> = new ComponentContent(this.uiContext, wrapBuilder(textBuilder), new NodeParams(this.suf));
1260
1261  build() {
1262    Column({ space: 8 }) {
1263      Text('outset slider').fontSize(9).fontColor(0xCCCCCC).width('90%').margin(15)
1264      Row() {
1265        Slider({
1266          value: 50,
1267          min: 0,
1268          max: 100,
1269          style: SliderStyle.OutSet
1270        })
1271          .showTips(true)
1272          .prefix(this.preNode1)
1273          .suffix(this.sufNode1)
1274      }
1275      .width('80%')
1276
1277      Row() {
1278        Slider({
1279          value: 50,
1280          min: 0,
1281          max: 100,
1282          style: SliderStyle.OutSet
1283        })
1284          .showTips(true)
1285          .prefix(this.preNode3)
1286      }
1287      .width('80%')
1288
1289      Row() {
1290        Slider({
1291          value: 50,
1292          min: 0,
1293          max: 100,
1294          style: SliderStyle.OutSet
1295        })
1296          .showTips(true)
1297          .suffix(this.sufNode3)
1298      }
1299      .width('80%')
1300
1301      Text('inset slider').fontSize(9).fontColor(0xCCCCCC).width('90%').margin(15)
1302      Row() {
1303        Slider({
1304          value: 50,
1305          min: 0,
1306          max: 100,
1307          style: SliderStyle.InSet
1308        })
1309          .blockColor('#191970')
1310          .trackColor('#ADD8E6')
1311          .selectedColor('#4169E1')
1312          .showTips(true)
1313          .trackThickness(36)
1314          .prefix(this.preNode2)
1315          .suffix(this.sufNode2)
1316      }
1317      .width('80%')
1318
1319      Row() {
1320        Slider({
1321          value: 50,
1322          min: 0,
1323          max: 100,
1324          style: SliderStyle.InSet
1325        })
1326          .blockColor('#191970')
1327          .trackColor('#ADD8E6')
1328          .selectedColor('#4169E1')
1329          .showTips(true)
1330          .trackThickness(36)
1331          .prefix(this.preNode4)
1332      }
1333      .width('80%')
1334
1335      Row() {
1336        Slider({
1337          value: 50,
1338          min: 0,
1339          max: 100,
1340          style: SliderStyle.InSet
1341        })
1342          .blockColor('#191970')
1343          .trackColor('#ADD8E6')
1344          .selectedColor('#4169E1')
1345          .showTips(true)
1346          .trackThickness(36)
1347          .suffix(this.sufNode4)
1348      }
1349      .width('80%')
1350
1351      Text('slider Show Step').fontSize(9).fontColor(0xCCCCCC).width('90%').margin(15)
1352      Row() {
1353        Slider({
1354          value: 50,
1355          min: 0,
1356          max: 100,
1357          step:10,
1358          style: SliderStyle.InSet
1359        })
1360          .blockColor('#191970')
1361          .trackColor('#ADD8E6')
1362          .selectedColor('#4169E1')
1363          .showTips(true)
1364          .trackThickness(36)
1365          .showSteps(true)
1366          .prefix(this.preNode5, {
1367            accessibilityText: 'prefixText',
1368            accessibilityDescription: 'prefixDescription',
1369            accessibilityLevel: 'auto',
1370            accessibilityGroup: true
1371          })
1372          .suffix(this.sufNode5, {
1373            accessibilityText: 'suffixText',
1374            accessibilityDescription: 'suffixDescription',
1375            accessibilityLevel: 'auto',
1376            accessibilityGroup: true
1377          })
1378      }
1379      .width('80%')
1380
1381      Row() {
1382        Slider({
1383          value: 50,
1384          min: 0,
1385          max: 100,
1386          step:10,
1387          style: SliderStyle.InSet
1388        })
1389          .blockColor('#191970')
1390          .trackColor('#ADD8E6')
1391          .selectedColor('#4169E1')
1392          .showTips(true)
1393          .trackThickness(36)
1394          .showSteps(true)
1395          .prefix(this.preNode6, {
1396            accessibilityText: 'prefixText',
1397            accessibilityDescription: 'prefixDescription',
1398            accessibilityLevel: 'auto',
1399            accessibilityGroup: true
1400          })
1401      }
1402      .width('80%')
1403
1404      Row() {
1405        Slider({
1406          value: 50,
1407          min: 0,
1408          max: 100,
1409          step:10,
1410          style: SliderStyle.InSet
1411        })
1412          .blockColor('#191970')
1413          .trackColor('#ADD8E6')
1414          .selectedColor('#4169E1')
1415          .showTips(true)
1416          .trackThickness(36)
1417          .showSteps(true)
1418          .suffix(this.sufNode6, {
1419            accessibilityText: 'suffixText',
1420            accessibilityDescription: 'suffixDescription',
1421            accessibilityLevel: 'auto',
1422            accessibilityGroup: true
1423          })
1424      }
1425      .width('80%')
1426    }.width('100%')
1427  }
1428}
1429```
1430
1431![slider_5](figures/slider_5.jpeg)
1432
1433
1434### 示例6(滑动条设置刻度点无障碍文本)
1435
1436该示例实现了Slider组件通过showSteps属性设置刻度点的无障碍文本信息。设置后,屏幕阅读器将以设置的无障碍内容进行朗读。
1437
1438```ts
1439
1440class SliderBlockBorderColorModifier1 implements AttributeModifier<SliderAttribute>{
1441  optionMaps:Map<number, SliderStepItemAccessibility> = new Map()
1442    .set(1, {text : "123123"})
1443    .set(2, {text : "Slider无障碍文本"})
1444    .set(3, {text : $r('app.string.stepItemText')})
1445    .set(4, {text : "!@#$%^&*()"});
1446  applyNormalAttribute(instance: SliderAttribute): void {
1447    instance.showSteps(true, {stepsAccessibility: this.optionMaps})
1448  }
1449}
1450@Entry
1451@Component
1452struct SliderExample {
1453  @State show: boolean = true;
1454  @State optionMaps:Map<number, SliderStepItemAccessibility> = new Map();
1455  private  sliderModifier: SliderBlockBorderColorModifier1 =new SliderBlockBorderColorModifier1()
1456  aboutToAppear(){
1457    this.optionMaps.set(1, {text : "123123"})
1458    this.optionMaps.set(2, {text : "Slider无障碍文本"})
1459    this.optionMaps.set(3, {text : $r('app.string.app_name')})
1460    this.optionMaps.set(4, {text : "!@#$%^&*()"})
1461    this.show = true;
1462  }
1463  build() {
1464    Column({ space: 8 }) {
1465      Text("show steps").fontSize(12).fontColor(0xCCCCCC).margin(15).width('90%')
1466      Row() {
1467        Slider({
1468          style: SliderStyle.InSet,
1469          value: 20,
1470          step: 10,
1471          max: 50,
1472          min: 0,
1473          direction: Axis.Horizontal
1474        })
1475          .stepSize(8)
1476          .stepColor(Color.Yellow)
1477          .showSteps(true, {stepsAccessibility: this.optionMaps})
1478      } .width('80%').height(300)
1479      Divider()
1480      Text("modifier").fontSize(12).fontColor(0xCCCCCC).margin(15).width('90%')
1481      Row() {
1482        Slider({
1483          style: SliderStyle.InSet,
1484          value: 20,
1485          step: 10,
1486          max: 50,
1487          min: 0,
1488          direction: Axis.Horizontal
1489        })
1490          .stepSize(8)
1491          .stepColor(Color.Yellow)
1492          .attributeModifier(this.sliderModifier)
1493      } .width('80%').height(300)
1494      Divider()
1495    }
1496  }
1497}
1498
1499```
1500![slider_step_options](figures/slider_step_options.png)
1501
1502### 示例7(设置滑动条的双向绑定)
1503
1504从API version 11开始,通过将[SliderOptions](#slideroptions对象说明)的value属性设置为[$$](../../../ui/state-management/arkts-two-way-sync.md)绑定的变量,实现数据同步。
1505
1506```ts
1507// xxx.ets
1508@Entry
1509@Component
1510struct SliderExample {
1511  @State valueWith$: number = 40
1512  @State valueWithout$: number = 40
1513  build() {
1514    Column({ space: 20 }) {
1515      Text("使用$$双向绑定: " + this.valueWith$)
1516      Slider({
1517        value: $$this.valueWith$,
1518        min: 0,
1519        max: 100,
1520      })
1521
1522      Text("不使用$$双向绑定: " + this.valueWithout$)
1523      Slider({
1524        value: this.valueWithout$,
1525        min: 0,
1526        max: 100,
1527      })
1528    }
1529  }
1530}
1531
1532```
1533
1534![slider07](figures/slider07.gif)