• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Swiper
2
3 滑块视图容器,提供子组件滑动轮播显示的能力。
4
5> **说明:**
6>
7> - 该组件从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8>
9> - Swiper组件内包含了[PanGesture](ts-basic-gestures-pangesture.md)拖动手势事件,用于滑动轮播子组件。[disableSwipe](#disableswipe8)属性设为true会取消内部的PanGesture事件监听。
10
11## 子组件
12
13可以包含子组件。
14
15>  **说明:**
16>
17>  - 子组件类型:系统组件和自定义组件,支持渲染控制类型([if/else](../../../ui/state-management/arkts-rendering-control-ifelse.md)、[ForEach](../../../ui/state-management/arkts-rendering-control-foreach.md)、[LazyForEach](../../../ui/state-management/arkts-rendering-control-lazyforeach.md)和[Repeat](../../../ui/state-management/arkts-new-rendering-control-repeat.md))。不建议子组件中混用懒加载组件(包括LazyForEach、Repeat)和非懒加载组件,或者子组件中使用多个懒加载组件,否则可能导致懒加载组件预加载能力失效等问题。不建议在组件动画过程中对数据源进行操作,否则会导致布局出现异常。
18>
19>  - Swiper子组件的[visibility](ts-universal-attributes-visibility.md#visibility)属性设置为Visibility.None,且Swiper的displayCount属性设置为'auto'时,对应子组件在视窗内不占位,但不影响导航点个数;visibility属性设置为Visibility.None或者Visibility.Hidden时,对应子组件不显示,但依然会在视窗内占位。
20>
21>  - 当Swiper子组件设置了[offset](ts-universal-attributes-location.md#offset)属性时,会按照子组件的层级进行绘制,层级高的子组件会覆盖层级低的子组件。例如,Swiper包含3个子组件,其中第3个子组件设置了offset({ x : 100 }),那么在横向循环滑动中,第3个子组件会覆盖第1个子组件,此时可设置第1个子组件的[zIndex](ts-universal-attributes-z-order.md)属性值大于第3个子组件,使第1个子组件层级高于第3个子组件。
22>
23>  - 在走焦到用户定义的子节点时,导航点、箭头会由于[焦点样式](../../../ui/arkts-common-events-focus-event.md#焦点样式)修改zindex的行为被遮挡。
24
25## 接口
26
27Swiper(controller?: SwiperController)
28
29创建滑块视图容器。
30
31**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
32
33**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
34
35**系统能力:** SystemCapability.ArkUI.ArkUI.Full
36
37**参数:**
38
39| 参数名        | 类型                                  | 必填   | 说明                 |
40| ---------- | ------------------------------------- | ---- | -------------------- |
41| controller | [SwiperController](#swipercontroller) | 否    | 给组件绑定一个控制器,用来控制组件翻页或者预加载指定子节点。 |
42
43
44## 属性
45
46除支持[通用属性](ts-component-general-attributes.md)外,还支持以下属性:
47
48> **说明:**
49>
50> Swiper组件[通用属性clip](ts-universal-attributes-sharp-clipping.md)的默认值为true。
51
52### index
53
54index(value: number)
55
56设置当前在容器中显示的子组件的索引值。设置小于0或大于等于子组件数量时,按照默认值0处理。
57
58从API version 10开始,该属性支持[$$](../../../ui/state-management/arkts-two-way-sync.md)双向绑定变量。
59
60**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
61
62**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
63
64**系统能力:** SystemCapability.ArkUI.ArkUI.Full
65
66**参数:**
67
68| 参数名 | 类型   | 必填 | 说明                                             |
69| ------ | ------ | ---- | ------------------------------------------------ |
70| value  | number | 是   | 当前在容器中显示的子组件的索引值。<br/>默认值:0 <br/>**说明:** <br/>设置的值小于0或大于最大页面索引时,取0。|
71
72### autoPlay
73
74autoPlay(value: boolean)
75
76设置子组件是否自动播放。
77
78[loop](#loop)为false时,自动轮播到最后一页时停止轮播。手势切换后不是最后一页时继续播放。当Swiper不可见时会停止轮播。
79
80**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
81
82**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
83
84**系统能力:** SystemCapability.ArkUI.ArkUI.Full
85
86**参数:**
87
88| 参数名 | 类型    | 必填 | 说明                                   |
89| ------ | ------- | ---- | -------------------------------------- |
90| value  | boolean | 是   | 子组件是否自动播放。<br/>默认值:false,不自动轮播。 |
91
92### autoPlay<sup>18+</sup>
93
94autoPlay(autoPlay: boolean, options: AutoPlayOptions)
95
96设置子组件是否自动播放。options入参控制手指或者鼠标等按下屏幕时子组件是否停止自动播放。
97
98当[loop](#loop)设置为false时,自动轮播将在到达最后一页时停止。在通过手势切换且未处于最后一页的情况下,轮播将继续进行。Swiper在不可见时,轮播也将停止。
99
100**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
101
102**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
103
104**系统能力:** SystemCapability.ArkUI.ArkUI.Full
105
106**参数:**
107
108| 参数名 | 类型    | 必填 | 说明                                   |
109| ------ | ------- | ---- | -------------------------------------- |
110| autoPlay  | boolean | 是   | 子组件是否自动播放。<br/>默认值:false,不自动轮播。 |
111| options  | [AutoPlayOptions](#autoplayoptions18对象说明)&nbsp; | 是   | 配置手指或者鼠标等按下屏幕时子组件是否停止自动播放。当stopWhenTouched设置为true时,多指按下场景中任意一个手指抬起后,将自动继续播放。<br/>默认值:{ stopWhenTouched: true },停止自动播放。 |
112
113### interval
114
115interval(value: number)
116
117设置使用自动播放时播放的时间间隔。
118
119**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
120
121**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
122
123**系统能力:** SystemCapability.ArkUI.ArkUI.Full
124
125**参数:**
126
127| 参数名 | 类型   | 必填 | 说明                                                       |
128| ------ | ------ | ---- | ---------------------------------------------------------- |
129| value  | number | 是   | 自动播放时播放的时间间隔。当小于[duration](#duration)属性值时,翻页完成后会立即开始下一次轮播。<br/>默认值:3000<br/>单位:毫秒<br/>取值范围:[0, +∞),设置小于0的值时,按照默认值处理。 |
130
131### indicator
132
133indicator(value: DotIndicator | DigitIndicator | boolean)
134
135设置可选导航点指示器样式。
136
137**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
138
139**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
140
141**系统能力:** SystemCapability.ArkUI.ArkUI.Full
142
143**参数:**
144
145| 参数名 | 类型                                                         | 必填 | 说明                                                         |
146| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
147| value  | [DotIndicator](#dotindicator10)<sup>10+</sup>&nbsp;\|&nbsp;[DigitIndicator](#digitindicator10)<sup>10+</sup>&nbsp;\|&nbsp;boolean | 是   | 可选导航点指示器样式。<br/> \- DotIndicator:圆点指示器样式。<br/> \- DigitIndicator:数字指示器样式。<br/> \- boolean:是否启用导航点指示器。设置为true启用,false不启用。<br/>&nbsp;&nbsp;默认值:true<br/>&nbsp;&nbsp;默认类型:DotIndicator |
148
149### indicator<sup>15+</sup>
150
151indicator(indicator: IndicatorComponentController | DotIndicator | DigitIndicator | boolean)
152
153设置外部绑定的导航点组件控制器。
154
155**卡片能力:** 从API version 15开始,该接口支持在ArkTS卡片中使用。
156
157**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。
158
159**系统能力:** SystemCapability.ArkUI.ArkUI.Full
160
161**参数:**
162
163| 参数名 | 类型                                                         | 必填 | 说明                                                         |
164| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
165| indicator  | [IndicatorComponentController](ts-swiper-components-indicator.md#indicatorcomponentcontroller)<sup>15+</sup>&nbsp;\| [DotIndicator](#dotindicator10)&nbsp;\|&nbsp;[DigitIndicator](#digitindicator10)&nbsp;\|&nbsp;boolean| 是   | 可选导航点指示器样式。<br/>\- IndicatorComponentController:单独导航点指示器控制器。当使用单独导航点指示器控制器时,可以与外部单独导航点进行绑定,但是绑定的单独导航点和内置导航点不能同时存在。<br/> \- DotIndicator:圆点指示器样式。<br/> \- DigitIndicator:数字指示器样式。<br/> \- boolean:是否启用导航点指示器。设置为true启用,false不启用。<br/>&nbsp;&nbsp;默认值:true<br/>&nbsp;&nbsp;默认类型:DotIndicator。|
166
167
168### loop
169
170loop(value: boolean)
171
172设置是否开启循环。设置为true时表示开启循环,在LazyForEach懒循环加载模式下,加载的组件数量建议大于5个。
173
174**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
175
176**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
177
178**系统能力:** SystemCapability.ArkUI.ArkUI.Full
179
180**参数:**
181
182| 参数名 | 类型    | 必填 | 说明                            |
183| ------ | ------- | ---- | ------------------------------- |
184| value  | boolean | 是   | 是否开启循环。true为开启循环,false为不开启循环。<br/>默认值:true |
185
186### duration
187
188duration(value: number)
189
190设置子组件切换的动画时长。
191
192duration需要和[curve](#curve8)一起使用。
193
194curve默认曲线为[interpolatingSpring](../js-apis-curve.md#curvesinterpolatingspring10),此时动画时长只受曲线自身参数影响,不再受duration的控制。不受duration控制的曲线可以查阅[插值计算](../js-apis-curve.md)模块,比如,[springMotion](../js-apis-curve.md#curvesspringmotion9)、[responsiveSpringMotion](../js-apis-curve.md#curvesresponsivespringmotion9)和interpolatingSpring类型的曲线不受duration控制。如果希望动画时长受到duration控制,需要给curve设置其他曲线。
195
196**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
197
198**系统能力:** SystemCapability.ArkUI.ArkUI.Full
199
200**参数:**
201
202| 参数名 | 类型   | 必填 | 说明                                                  |
203| ------ | ------ | ---- | ----------------------------------------------------- |
204| value  | number | 是   | 子组件切换的动画时长。<br/>默认值:400<br/>单位:毫秒<br/>取值范围:[0, +∞),设置小于0的值时,按照默认值处理。 |
205
206### vertical
207
208vertical(value: boolean)
209
210设置是否为纵向滑动。
211
212**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
213
214**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
215
216**系统能力:** SystemCapability.ArkUI.ArkUI.Full
217
218**参数:**
219
220| 参数名 | 类型    | 必填 | 说明                               |
221| ------ | ------- | ---- | ---------------------------------- |
222| value  | boolean | 是   | 是否为纵向滑动。true为纵向滑动,false为横向滑动。<br/>默认值:false |
223
224### itemSpace
225
226itemSpace(value: number | string)
227
228设置子组件与子组件之间间隙。不支持设置百分比。
229
230类型为number时,默认单位vp。类型为string时,需要显式指定像素单位,如'10px';未指定像素单位时,如'10',单位为vp。
231
232**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
233
234**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
235
236**系统能力:** SystemCapability.ArkUI.ArkUI.Full
237
238**参数:**
239
240| 参数名 | 类型                       | 必填 | 说明                                   |
241| ------ | -------------------------- | ---- | -------------------------------------- |
242| value  | number&nbsp;\|&nbsp;string | 是   | 子组件与子组件之间间隙。<br/>默认值:0<br/>取值范围:[0, +∞),当设置数值小于0或超出Swiper组件宽度范围时,按照默认值处理。 |
243
244### displayMode
245
246displayMode(value: SwiperDisplayMode)
247
248设置主轴方向上元素排列的模式,优先以displayCount设置的个数显示,displayCount未设置时本属性生效。
249
250**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
251
252**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
253
254**系统能力:** SystemCapability.ArkUI.ArkUI.Full
255
256**参数:**
257
258| 参数名 | 类型                                            | 必填 | 说明                                                         |
259| ------ | ----------------------------------------------- | ---- | ------------------------------------------------------------ |
260| value  | [SwiperDisplayMode](#swiperdisplaymode枚举说明) | 是   | 主轴方向上元素排列的模式。<br/>默认值:SwiperDisplayMode.STRETCH |
261
262### cachedCount<sup>8+</sup>
263
264cachedCount(value: number)
265
266设置预加载子组件个数,以当前页面为基准,加载当前显示页面的前后个数。例如cachedCount=1时,会将当前显示的页面的前面一页和后面一页的子组件都预加载。如果设置为按组翻页,即displayCount的swipeByGroup参数设为true,预加载时会以组为基本单位。例如cachedCount=1,swipeByGroup=true时,会将当前组的前面一组和后面一组的子组件都预加载。
267
268**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
269
270**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
271
272**系统能力:** SystemCapability.ArkUI.ArkUI.Full
273
274**参数:**
275
276| 参数名 | 类型   | 必填 | 说明                             |
277| ------ | ------ | ---- | -------------------------------- |
278| value  | number | 是   | 预加载子组件个数。<br/>默认值:1<br/>取值范围:[0, +∞),设置小于0的值时,按照默认值处理。 |
279
280### cachedCount<sup>15+</sup>
281
282cachedCount(count: number, isShown: boolean)
283
284设置预加载子组件个数。
285
286**卡片能力:** 从API version 15开始,该接口支持在ArkTS卡片中使用。
287
288**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。
289
290**系统能力:** SystemCapability.ArkUI.ArkUI.Full
291
292**参数:**
293
294| 参数名 | 类型   | 必填 | 说明                             |
295| ------ | ------ | ---- | -------------------------------- |
296| count  | number | 是   | 预加载子组件个数。<br/>默认值:1<br/>取值范围:[0, +∞),设置小于0的值时,按照默认值处理。 |
297| isShown  | boolean | 是   | 预加载范围内的节点是否进行绘制,不下渲染树。<br/>默认值:false,预加载范围内的节点不进行绘制。 |
298
299### disableSwipe<sup>8+</sup>
300
301disableSwipe(value: boolean)
302
303设置禁用组件滑动切换功能。
304
305**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
306
307**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
308
309**系统能力:** SystemCapability.ArkUI.ArkUI.Full
310
311**参数:**
312
313| 参数名 | 类型    | 必填 | 说明                                     |
314| ------ | ------- | ---- | ---------------------------------------- |
315| value  | boolean | 是   | 禁用组件滑动切换功能。设置为true禁用,false不禁用。<br/>默认值:false |
316
317### curve<sup>8+</sup>
318
319curve(value: Curve | string | ICurve)
320
321设置Swiper的动画曲线,默认为弹簧插值曲线,常用曲线参考[Curve枚举说明](ts-appendix-enums.md#curve),也可以通过[插值计算](../js-apis-curve.md)模块提供的接口创建自定义的插值曲线对象。
322
323**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
324
325**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
326
327**系统能力:** SystemCapability.ArkUI.ArkUI.Full
328
329**参数:**
330
331| 参数名 | 类型                                                         | 必填 | 说明                                        |
332| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------- |
333| value  | [Curve](ts-appendix-enums.md#curve)&nbsp;\|&nbsp;string&nbsp;\|&nbsp;[ICurve](../js-apis-curve.md#icurve9)<sup>10+</sup> | 是   | Swiper的动画曲线。<br/>string类型来源[curves.init](../js-apis-curve.md#curvesinitdeprecated),[curves.steps](../js-apis-curve.md#curvesstepsdeprecated),[curves.cubicBezier](../js-apis-curve.md#curvescubicbezierdeprecated),[curves.spring](../js-apis-curve.md#curvesspringdeprecated)函数从API 9开始废弃,推荐使用Curve和ICurve类型。<br/>默认值:[interpolatingSpring](../js-apis-curve.md#curvesinterpolatingspring10)(-1, 1, 328, 34) |
334
335### indicatorStyle<sup>(deprecated)</sup>
336
337indicatorStyle(value?: IndicatorStyle)
338
339设置导航点样式。
340
341从API version 8开始支持,从API version 10开始不再维护,建议使用[indicator](#indicator10)代替。
342
343**系统能力:** SystemCapability.ArkUI.ArkUI.Full
344
345**参数:**
346
347| 参数名 | 类型                                                | 必填 | 说明         |
348| ------ | --------------------------------------------------- | ---- | ------------ |
349| value  | [IndicatorStyle](#indicatorstyledeprecated对象说明) | 否   | 导航点样式。 |
350
351### displayCount<sup>8+</sup>
352
353displayCount(value: number | string | SwiperAutoFill, swipeByGroup?: boolean)
354
355设置Swiper视窗内元素显示个数。
356
357使用字符串类型时,仅支持设置为'auto',此时,设置[customContentTransition](#customcontenttransition12)和[onContentDidScroll](#oncontentdidscroll12)事件不生效。使用number类型时,子组件按照主轴均分Swiper宽度(减去displayCount-1个itemSpace)的方式进行主轴拉伸(收缩)布局,设置为小于等于0的值时,按默认值1显示。使用SwiperAutoFill类型时,通过设置一个子组件最小宽度值minSize,会根据Swiper当前宽度和minSize值自动计算并更改一页内元素显示个数。当minSize为空或者小于等于0时,Swiper显示1列。
358
359当按组进行翻页时,判定翻页的拖拽距离阈值将调整为Swiper宽度的50%(若按子元素翻页,该阈值为子元素宽度的50%)。若最后一组的子元素数量少于displayCount,将利用占位子元素进行填充,占位子元素仅用于布局定位,不显示任何内容,其位置将直接显示Swiper的背景样式。
360
361**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
362
363**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
364
365**系统能力:** SystemCapability.ArkUI.ArkUI.Full
366
367**参数:**
368
369| 参数名                     | 类型                                                         | 必填 | 说明                                                         |
370| -------------------------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
371| value                      | number&nbsp;\|&nbsp;string&nbsp;\|&nbsp;[SwiperAutoFill](#swiperautofill10)<sup>10+</sup> | 是   | 视窗内显示的子元素个数。<br/> 默认值:1<br/>取值范围:(0, +∞),设置小于等于0的值时,按照默认值处理。|
372| swipeByGroup<sup>11+</sup> | boolean                                                      | 否   | 是否按组进行翻页。如果设为true,在翻页时会按组进行翻页,每组内子元素的数量为displayCount value的值;如果为false,则为默认翻页行为,即按照子元素进行翻页。<br/> 默认值:false |
373
374> **说明:**
375>
376>  当Swiper子组件个数小于等于Swiper组件内容区内显示的节点总个数(totalDisplayCount = DisplayCount + prevMargin? (1 : 0) + nextMargin? (1 : 0))时,一般按照非循环模式布局处理,此时,前后边距对应子组件不显示,但依然会在视窗内占位。Swiper组件按照totalDisplayCount个数判断测算规格。例外情况如下:
377>
378>  - 当Swiper子组件个数等于Swiper组件内容区内显示的节点总个数且prevMargin和nextMargin都生效时,设置loop为true支持循环。
379>
380>  - 当Swiper子组件个数等于Swiper组件DisplayCount数 + 1,且prevMargin和nextMargin至少一个生效时,设置loop为true会生成截图占位组件(如果使用图片异步加载等显示耗时较长的组件可能不能正确生成截图,不建议在该场景开启循环),支持循环。
381>
382
383### effectMode<sup>8+</sup>
384
385effectMode(value: EdgeEffect)
386
387设置边缘滑动效果,[loop](#loop) = false时生效。调用SwiperController.changeIndex()、SwiperController.showNext()和SwiperController.showPrevious()接口跳转至首尾页时不生效回弹。
388
389**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
390
391**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
392
393**系统能力:** SystemCapability.ArkUI.ArkUI.Full
394
395**参数:**
396
397| 参数名 | 类型                                          | 必填 | 说明                                         |
398| ------ | --------------------------------------------- | ---- | -------------------------------------------- |
399| value  | [EdgeEffect](ts-appendix-enums.md#edgeeffect) | 是   | 边缘滑动效果。<br/>默认值:EdgeEffect.Spring |
400
401### displayArrow<sup>10+</sup>
402
403displayArrow(value: ArrowStyle | boolean, isHoverShow?: boolean)
404
405设置导航点箭头样式。
406
407**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
408
409**系统能力:** SystemCapability.ArkUI.ArkUI.Full
410
411**参数:**
412
413| 参数名                     | 类型                                             | 必填 | 说明                                                         |
414| -------------------------- | ------------------------------------------------ | ---- | ------------------------------------------------------------ |
415| value                      | [ArrowStyle](#arrowstyle10对象说明)&nbsp;\|&nbsp;boolean | 是   | 支持设置箭头和底板样式,异常场景使用ArrowStyle对象中的默认值。设置为false不显示箭头和底板,true显示默认的箭头和底板样式。<br/>默认值:false |
416| isHoverShow                | boolean                                          | 否   | 设置鼠标悬停时是否显示箭头。<br/>默认值:false<br/>**说明:**<br/>1、isHoverShow为false时,常驻显示箭头。<br/>2、isHoverShow为true时,有导航点时鼠标悬停在导航点和箭头范围内显示箭头,无导航点时鼠标悬停在Swiper显示范围内显示箭头。<br/>3、箭头显示时,支持点击翻页。 |
417
418> **说明:**
419>
420> Swiper视窗内显示所有子节点时,只显示一屏,无法翻页,左右翻页箭头均不显示。
421
422### nextMargin<sup>10+</sup>
423
424nextMargin(value: Length, ignoreBlank?:boolean)
425
426设置后边距,用于露出后一项的一小部分,使用效果可以参考[示例1设置导航点交互及翻页动效](#示例1设置导航点交互及翻页动效)。仅当Swiper子组件的布局方式为拉伸时生效,主要包括两种场景:1、displayMode属性设置为SwiperDisplayMode.STRETCH;2、displayCount属性设置为number类型。
427
428当主轴方向为横向布局时,nextMargin/prevMargin中任意一个大于子组件测算的宽度,nextMargin和prevMargin均不显示。
429
430当主轴方向为纵向布局时,nextMargin/prevMargin中任意一个大于子组件测算的高度,nextMargin和prevMargin均不显示。
431
432**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
433
434**系统能力:** SystemCapability.ArkUI.ArkUI.Full
435
436**参数:**
437
438| 参数名 | 类型                         | 必填 | 说明                   |
439| ------ | ---------------------------- | ---- | ---------------------- |
440| value  | [Length](ts-types.md#length) | 是   | 后边距。不支持设置百分比。<br/>默认值:0 |
441| ignoreBlank<sup>12+</sup>  | boolean | 否   | 非loop场景下尾页不显示nextMargin。在非loop场景下,设置为true时,尾页不显示空白的nextMargin,尾页的右边缘与Swiper视窗右边缘对齐;设置false时,尾页显示空白nextMargin,尾页的右边缘与Swiper视窗右边缘的距离为nextMargin。<br/>默认值:false <br/>**说明:**<br/>尾页场景下,prevMargin和nextMargin的值相加作为左边边距显示前一个页面。 |
442
443### prevMargin<sup>10+</sup>
444
445prevMargin(value: Length, ignoreBlank?:boolean)
446
447设置前边距,用于露出前一项的一小部分,使用效果可以参考[示例1设置导航点交互及翻页动效](#示例1设置导航点交互及翻页动效)。仅当Swiper子组件的布局方式为拉伸时生效,主要包括两种场景:1、displayMode属性设置为SwiperDisplayMode.STRETCH;2、displayCount属性设置为number类型。
448
449当主轴方向为横向布局时,nextMargin/prevMargin中任意一个大于子组件测算的宽度,nextMargin和prevMargin均不显示。
450
451当主轴方向为纵向布局时,nextMargin/prevMargin中任意一个大于子组件测算的高度,nextMargin和prevMargin均不显示。
452
453**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
454
455**系统能力:** SystemCapability.ArkUI.ArkUI.Full
456
457**参数:**
458
459| 参数名 | 类型                         | 必填 | 说明                   |
460| ------ | ---------------------------- | ---- | ---------------------- |
461| value  | [Length](ts-types.md#length) | 是   | 前边距。不支持设置百分比。<br/>默认值:0 |
462| ignoreBlank<sup>12+</sup>  | boolean | 否   | 非loop场景下首页不显示prevMargin。在非loop场景下,设置为true时,首页不显示空白的prevMargin,首页的左边缘与Swiper视窗左边缘对齐;设置false时,首页显示空白prevMargin,首页的左边缘与Swiper视窗左边缘的距离为prevMargin。<br/>默认值:false <br/>**说明:**<br/>首页场景下,prevMargin和nextMargin的值相加作为右边边距显示后一个页面。|
463
464### nestedScroll<sup>11+</sup>
465
466nestedScroll(value: SwiperNestedScrollMode)
467
468设置Swiper组件和父组件的嵌套滚动模式。loop为true时Swiper组件没有边缘,不会触发父组件嵌套滚动。
469
470**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
471
472**系统能力:** SystemCapability.ArkUI.ArkUI.Full
473
474**参数:**
475
476| 参数名 | 类型                                                        | 必填 | 说明                                                         |
477| ------ | ----------------------------------------------------------- | ---- | ------------------------------------------------------------ |
478| value  | [SwiperNestedScrollMode](#swipernestedscrollmode11枚举说明) | 是   | Swiper组件和父组件的嵌套滚动模式。<br/>默认值:SwiperNestedScrollMode.SELF_ONLY |
479
480> **说明:**
481>
482> 由于Swiper的抛滑动画逻辑和其它滚动类组件不同(Swiper一次只能滑动一页,抛滑时做翻页动画),当Swiper内嵌套其它滚动组件时,如果Swiper的翻页动画已经启动,将无法接受子节点上传的滚动偏移量。这时Swiper的翻页动画和子节点的边缘效果动画会同时执行。
483
484### indicatorInteractive<sup>12+</sup>
485
486indicatorInteractive(value: boolean)
487
488设置禁用组件导航点交互功能。设置为true时表示导航点可交互。
489
490**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
491
492**系统能力:** SystemCapability.ArkUI.ArkUI.Full
493
494**参数:**
495
496| 参数名 | 类型                                                        | 必填 | 说明                                                         |
497| ------ | ----------------------------------------------------------- | ---- | ------------------------------------------------------------ |
498| value  | boolean | 是   | 导航点是否可交互。true为导航点可交互,false为导航点不可交互。<br/>默认值:true |
499
500### pageFlipMode<sup>15+</sup>
501
502pageFlipMode(mode: Optional\<PageFlipMode>)
503
504设置鼠标滚轮翻页模式。
505
506**卡片能力:** 从API version 15开始,该接口支持在ArkTS卡片中使用。
507
508**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。
509
510**系统能力:** SystemCapability.ArkUI.ArkUI.Full
511
512**参数:**
513
514| 参数名 | 类型                                                        | 必填 | 说明                                                         |
515| ------ | ----------------------------------------------------------- | ---- | ------------------------------------------------------------ |
516| mode  | Optional\<[PageFlipMode](ts-appendix-enums.md#pageflipmode15)> | 是   | 鼠标滚轮翻页模式。<br/>默认值:PageFlipMode.CONTINUOUS |
517
518## IndicatorStyle<sup>(deprecated)</sup>对象说明
519
520从API version 8开始支持,从API version 10开始不再维护,建议使用[indicator](#indicator10)代替。
521
522**系统能力:** SystemCapability.ArkUI.ArkUI.Full
523
524| 名称          | 类型                                       | 必填 | 说明                                                 |
525| ------------- | ------------------------------------------ | ---- | ---------------------------------------------------- |
526| left          | [Length](ts-types.md#length)               | 否   | 设置导航点左侧相对于Swiper的位置。<br/>未设置left和right时,进行自适应大小布局,按照指示器本身大小和Swiper的大小在主轴方向上进行居中对齐<br/>设置为0时:按照0位置布局计算<br/>优先级:高于right属性<br/>取值范围:[0,Swiper宽度-导航点区域宽度],超出该范围时,取最近的边界值。                 |
527| top           | [Length](ts-types.md#length)               | 否   | 设置导航点顶部相对于Swiper的位置。<br/>未设置top和bottom时,进行自适应大小布局,按照指示器本身大小和Swiper的大小,在交叉轴方向上,位于底部,效果与设置bottom=0一致<br/>设置为0时:按照0位置布局计算<br/>优先级:高于bottom属性<br/>取值范围:[0,Swiper高度-导航点区域高度],超出该范围时,取最近的边界值。                 |
528| right         | [Length](ts-types.md#length)               | 否   | 设置导航点右侧相对于Swiper的位置。<br/>未设置left和right时,进行自适应大小布局,按照指示器本身大小和Swiper的大小在主轴方向上进行居中对齐<br/>设置为0时:按照0位置布局计算<br/>优先级:低于left属性<br/>取值范围:[0,Swiper宽度-导航点区域宽度],超出该范围时,取最近的边界值。                 |
529| bottom        | [Length](ts-types.md#length)               | 否   | 设置导航点底部相对于Swiper的位置。<br/>未设置top和bottom时,进行自适应大小布局,按照指示器本身大小和Swiper的大小,在交叉轴方向上,位于底部,效果与设置bottom=0一致<br/>设置为0时:按照0位置布局计算<br/>优先级:低于top属性<br/>取值范围:[0,Swiper高度-导航点区域高度],超出该范围时,取最近的边界值。                 |
530| size          | [Length](ts-types.md#length)               | 否   | 设置导航点的直径,不支持设置百分比。<br/>默认值:6vp |
531| mask          | boolean                                    | 否   | 设置是否显示导航点蒙层样式。<br/>设置为true时显示导航点蒙层样式,为false时不显示。                         |
532| color         | [ResourceColor](ts-types.md#resourcecolor) | 否   | 设置导航点的颜色。                                   |
533| selectedColor | [ResourceColor](ts-types.md#resourcecolor) | 否   | 设置选中的导航点的颜色。                             |
534
535## SwiperDisplayMode枚举说明
536
537Swiper在主轴上的尺寸大小模式枚举。
538
539**系统能力:** SystemCapability.ArkUI.ArkUI.Full
540
541| 名称                               | 说明                                                         |
542| ---------------------------------- | ------------------------------------------------------------ |
543| Stretch<sup>(deprecated)</sup>     | Swiper滑动一页的宽度为Swiper组件自身的宽度。<br>从API version 10开始不再维护,建议使用STRETCH代替。<br/>**卡片能力:** 从API version 7开始,该接口支持在ArkTS卡片中使用。 |
544| AutoLinear<sup>(deprecated)</sup>  | Swiper滑动一页的宽度为子组件宽度中的最大值。<br>从API version 10开始不再维护,建议使用[Scroller.scrollTo](ts-container-scroll.md#scrollto)代替。<br/>**卡片能力:** 从API version 7开始,该接口支持在ArkTS卡片中使用。 |
545| STRETCH<sup>10+</sup>              | Swiper滑动一页的宽度为Swiper组件自身的宽度。<br/>**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
546| AUTO_LINEAR<sup>(deprecated)</sup> | Swiper滑动一页的宽度为视窗内最左侧子组件的宽度。<br/>从API version 10开始支持,从API version 12开始不再维护,建议使用[Scroller.scrollTo](ts-container-scroll.md#scrollto)代替。<br/>**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
547
548## SwiperNestedScrollMode<sup>11+</sup>枚举说明
549
550Swiper组件和父组件的嵌套滚动模式枚举。
551
552**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
553
554**系统能力:** SystemCapability.ArkUI.ArkUI.Full
555
556| 名称          | 值 | 说明                                     |
557| ------------ | -- | ---------------------------------------- |
558| SELF_ONLY    | 0  | Swiper只自身滚动,不与父组件联动。 |
559| SELF_FIRST   | 1  | Swiper自身先滚动,自身滚动到边缘以后父组件滚动。父组件滚动到边缘以后,如果父组件有边缘效果,则父组件触发边缘效果,否则Swiper触发边缘效果。 |
560
561## SwiperController
562
563Swiper容器组件的控制器,可以将此对象绑定至Swiper组件,实现控制Swiper翻页等功能。
564
565**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
566
567**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
568
569**系统能力:** SystemCapability.ArkUI.ArkUI.Full
570
571### constructor
572
573constructor()
574
575SwiperController的构造函数。
576
577**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
578
579**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
580
581**系统能力:** SystemCapability.ArkUI.ArkUI.Full
582
583### showNext
584
585showNext()
586
587翻至下一页。翻页带动效切换过程,时长通过Swiper的[duration](#duration)属性设置。
588
589**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
590
591**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
592
593**系统能力:** SystemCapability.ArkUI.ArkUI.Full
594
595### showPrevious
596
597showPrevious()
598
599翻至上一页。翻页带动效切换过程,时长通过Swiper的[duration](#duration)属性设置。
600
601**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
602
603**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
604
605**系统能力:** SystemCapability.ArkUI.ArkUI.Full
606
607### changeIndex<sup>12+</sup>
608
609changeIndex(index: number, useAnimation?: boolean)
610
611翻至指定页面。
612
613**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。
614
615**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
616
617**系统能力:** SystemCapability.ArkUI.ArkUI.Full
618
619**参数:**
620
621| 参数名      | 类型       | 必填  | 说明     |
622| -------- | ---------- | ---- | -------- |
623| index| number | 是    | 指定页面在Swiper中的索引值。<br/>**说明:** <br/>设置的值小于0或大于最大页面索引时,取0。 |
624| useAnimation| boolean | 否    | 设置翻至指定页面时是否有动效,true表示有动效,false表示没有动效。<br/>默认值:false。 |
625
626### changeIndex<sup>15+</sup>
627
628changeIndex(index: number, animationMode?: SwiperAnimationMode | boolean)
629
630翻页至指定页面。
631
632**卡片能力:** 从API version 15开始,该接口支持在ArkTS卡片中使用。
633
634**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。
635
636**系统能力:** SystemCapability.ArkUI.ArkUI.Full
637
638**参数:**
639
640| 参数名      | 类型       | 必填  | 说明     |
641| -------- | ---------- | ---- | -------- |
642| index| number | 是    | 指定页面在Swiper中的索引值。<br/>**说明:** <br/>设置的值小于0或大于最大页面索引时,取0。 |
643| animationMode| [SwiperAnimationMode](#swiperanimationmode15枚举说明)&nbsp;\|&nbsp;boolean | 否    | 设置翻页至指定页面时的动效模式。<br/>默认值:SwiperAnimationMode.NO_ANIMATION<br/> **说明:** <br/>当传入true时有动效,等同于SwiperAnimationMode.DEFAULT_ANIMATION;当传入false时无动效,等同于SwiperAnimationMode.NO_ANIMATION。 |
644
645### finishAnimation
646
647finishAnimation(callback?: VoidCallback)
648
649停止播放动画。
650
651**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
652
653**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
654
655**系统能力:** SystemCapability.ArkUI.ArkUI.Full
656
657**参数:**
658
659| 参数名      | 类型       | 必填  | 说明     |
660| -------- | ---------- | ---- | -------- |
661| callback | [VoidCallback](./ts-types.md#voidcallback12) | 否    | 动画结束的回调。 |
662
663### preloadItems<sup>18+</sup>
664
665preloadItems(indices: Optional\<Array\<number>>): Promise\<void>
666
667控制Swiper预加载指定子节点。调用该接口后会一次性加载所有指定的子节点,因此为了性能考虑,建议分批加载子节点。
668
669如果SwiperController对象未绑定任何Swiper组件,直接调用该接口,会抛出JS异常,并返回错误码100004。因此使用该接口时,建议通过try-catch捕获异常。
670
671与[LazyForEach](../../../ui/state-management/arkts-rendering-control-lazyforeach.md)和自定义组件结合使用时,由于[LazyForEach](../../../ui/state-management/arkts-rendering-control-lazyforeach.md)只会保留缓存范围内的自定义组件,在缓存范围外的会被删除,因此需要开发者保证通过该接口预加载的节点index在缓存范围内。
672
673**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
674
675**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
676
677**系统能力:** SystemCapability.ArkUI.ArkUI.Full
678
679**参数:**
680
681| 参数名   | 类型   | 必填   | 说明                                     |
682| ----- | ------ | ---- | ---------------------------------------- |
683| indices | Optional\<Array\<number>> | 是 | 需预加载的子节点的下标数组。<br/>默认值:空数组。 |
684
685**返回值:**
686
687| 类型                                                         | 说明                     |
688| ------------------------------------------------------------ | ------------------------ |
689| Promise\<void> | 预加载完成后触发的回调。 |
690
691**错误码:**
692
693以下错误码的详细介绍请参见[通用错误码](../../errorcode-universal.md)和[滚动类组件错误码](../../apis-arkui/errorcode-scroll.md)错误码。
694
695| 错误码ID   | 错误信息                                      |
696| --------   | -------------------------------------------- |
697| 401 | Parameter invalid. Possible causes: 1. The parameter type is not Array\<number>; 2. The parameter is an empty array; 3. The parameter contains an invalid index. |
698| 100004 | Controller not bound to component. |
699
700## SwiperAnimationMode<sup>15+</sup>枚举说明
701
702Swiper组件翻页至指定页面的动效模式。
703
704**卡片能力:** 从API version 15开始,该接口支持在ArkTS卡片中使用。
705
706**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。
707
708**系统能力:** SystemCapability.ArkUI.ArkUI.Full
709
710| 名称          | 值   | 说明                                                         |
711| ------------- | ---- | ------------------------------------------------------------ |
712| NO_ANIMATION  | 0    | 无动效翻页至指定页面。                                                 |
713| DEFAULT_ANIMATION | 1    | 有动效翻页至指定页面。                             |
714| FAST_ANIMATION  | 2    | 先无动效翻页至指定页面附近,再有动效翻页至指定页面。 |
715
716## Indicator<sup>10+</sup>
717
718设置导航点距离Swiper组件距离。由于导航点有默认交互区域,交互区域高度为32vp,所以无法让显示部分完全贴底。
719
720**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
721
722**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
723
724**系统能力:** SystemCapability.ArkUI.ArkUI.Full
725
726### left
727
728left(value: Length): T
729
730导航点左侧相对于Swiper的位置。
731
732**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
733
734**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
735
736**系统能力:** SystemCapability.ArkUI.ArkUI.Full
737
738**参数:**
739
740| 参数名 | 类型                         | 必填 | 说明                                                         |
741| ------ | ---------------------------- | ---- | ------------------------------------------------------------ |
742| value  | [Length](ts-types.md#length) | 是   | 设置导航点左侧相对于Swiper的位置。<br/>未设置left和right时,进行自适应大小布局,按照指示器本身大小和Swiper的大小在主轴方向上进行居中对齐。<br/>设置为0时:按照0位置布局计算。<br/>优先级:高于right属性。<br/>取值范围:[0,Swiper宽度-导航点区域宽度],超出该范围时,取最近的边界值。 |
743
744### top
745
746top(value: Length): T
747
748导航点顶部相对于Swiper的位置。
749
750**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
751
752**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
753
754**系统能力:** SystemCapability.ArkUI.ArkUI.Full
755
756**参数:**
757
758| 参数名 | 类型                         | 必填 | 说明                                                         |
759| ------ | ---------------------------- | ---- | ------------------------------------------------------------ |
760| value  | [Length](ts-types.md#length) | 是   | 设置导航点顶部相对于Swiper的位置。<br/>未设置top和bottom时,进行自适应大小布局,按照指示器本身大小和Swiper的大小,在交叉轴方向上,位于底部,效果与设置bottom=0一致。<br/>设置为0时:按照0位置布局计算。<br/>优先级:高于bottom属性。<br/>取值范围:[0,Swiper高度-导航点区域高度],超出该范围时,取最近的边界值。 |
761
762### right
763
764right(value: Length): T
765
766导航点右侧相对于Swiper的位置。
767
768**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
769
770**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
771
772**系统能力:** SystemCapability.ArkUI.ArkUI.Full
773
774**参数:**
775
776| 参数名 | 类型                         | 必填 | 说明                                                         |
777| ------ | ---------------------------- | ---- | ------------------------------------------------------------ |
778| value  | [Length](ts-types.md#length) | 是   | 设置导航点右侧相对于Swiper的位置。<br/>未设置left和right时,进行自适应大小布局,按照指示器本身大小和Swiper的大小在主轴方向上进行居中对齐。<br/>设置为0时:按照0位置布局计算。<br/>优先级:低于left属性。<br/>取值范围:[0,Swiper宽度-导航点区域宽度],超出该范围 时,取最近的边界值。 |
779
780### bottom
781
782bottom(value: Length): T
783
784导航点底部相对于Swiper的位置。
785
786**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
787
788**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
789
790**系统能力:** SystemCapability.ArkUI.ArkUI.Full
791
792**参数:**
793
794| 参数名 | 类型                         | 必填 | 说明                                                         |
795| ------ | ---------------------------- | ---- | ------------------------------------------------------------ |
796| value  | [Length](ts-types.md#length) | 是   | 设置导航点底部相对于Swiper的位置。<br/>未设置top和bottom时,进行自适应大小布局,按照指示器本身大小和Swiper的大小,在交叉轴方向上,位于底部,效果与设置bottom=0一致。<br/>设置为0时:按照0位置布局计算。<br/>优先级:低于top属性。<br/>取值范围:[0,Swiper高度-导航点区域高度],超出该范围时,取最近的边界值。 |
797
798### start<sup>12+</sup>
799
800start(value: LengthMetrics): T
801
802在RTL模式下为导航点距离Swiper组件右边的距离,在LTR模式下为导航点距离Swiper组件左边的距离。
803
804**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。
805
806**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
807
808**系统能力:** SystemCapability.ArkUI.ArkUI.Full
809
810**参数:**
811
812| 参数名 | 类型                                                         | 必填 | 说明                                                         |
813| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
814| value  | [LengthMetrics](../js-apis-arkui-graphics.md#lengthmetrics12) | 是   | 设置在RTL模式下为导航点距离Swiper组件右边的距离,在LTR模式下为导航点距离Swiper组件左边的距离<br/>默认值:0<br/>单位:vp |
815
816### end<sup>12+</sup>
817
818end(value: LengthMetrics): T
819
820在RTL模式下为导航点距离Swiper组件左边的距离,在LTR模式下为导航点距离Swiper组件右边的距离。
821
822**卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。
823
824**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
825
826**系统能力:** SystemCapability.ArkUI.ArkUI.Full
827
828**参数:**
829
830| 参数名 | 类型                         | 必填  | 说明                                     |
831| ------ | ---------------------------- | ---- | ---------------------------------------- |
832| value | [LengthMetrics](../js-apis-arkui-graphics.md#lengthmetrics12) | 是    | 设置在RTL模式下为导航点距离Swiper组件左边的距离,在LTR模式下为导航点距离Swiper组件右边的距离。<br/>默认值:0<br/>单位:vp  |
833
834### dot
835
836static dot(): DotIndicator
837
838返回一个DotIndicator对象。
839
840**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
841
842**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
843
844**系统能力:** SystemCapability.ArkUI.ArkUI.Full
845
846**返回值:**
847
848| 类型                            | 说明         |
849| ------------------------------- | ------------ |
850| [DotIndicator](#dotindicator10) | 圆点指示器。 |
851
852### digit
853
854static digit(): DigitIndicator
855
856返回一个DigitIndicator对象。
857
858**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
859
860**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
861
862**系统能力:** SystemCapability.ArkUI.ArkUI.Full
863
864**返回值:**
865
866| 类型                                | 说明         |
867| ----------------------------------- | ------------ |
868| [DigitIndicator](#digitindicator10) | 数字指示器。 |
869
870## DotIndicator<sup>10+</sup>
871
872构造圆点指示器的样式,继承自[Indicator](#indicator10)。
873
874**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
875
876**系统能力:** SystemCapability.ArkUI.ArkUI.Full
877
878### itemWidth
879
880itemWidth(value: Length): DotIndicator
881
882Swiper组件圆点导航指示器的宽,不支持设置百分比。
883
884**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
885
886**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
887
888**系统能力:** SystemCapability.ArkUI.ArkUI.Full
889
890**参数:**
891
892| 参数名 | 类型                         | 必填 | 说明                                                         |
893| ------ | ---------------------------- | ---- | ------------------------------------------------------------ |
894| value  | [Length](ts-types.md#length) | 是   | 设置Swiper组件圆点导航指示器的宽,不支持设置百分比。<br/>默认值:6<br/>单位:vp |
895
896**返回值:**
897
898| 类型                            | 说明         |
899| ------------------------------- | ------------ |
900| [DotIndicator](#dotindicator10) | 圆点指示器。 |
901
902### itemHeight
903
904itemHeight(value: Length): DotIndicator
905
906Swiper组件圆点导航指示器的高,不支持设置百分比。
907
908**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
909
910**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
911
912**系统能力:** SystemCapability.ArkUI.ArkUI.Full
913
914**参数:**
915
916| 参数名 | 类型                         | 必填 | 说明                                                         |
917| ------ | ---------------------------- | ---- | ------------------------------------------------------------ |
918| value  | [Length](ts-types.md#length) | 是   | 设置Swiper组件圆点导航指示器的高,不支持设置百分比。<br/>默认值:6<br/>单位:vp |
919
920**返回值:**
921
922| 类型                            | 说明         |
923| ------------------------------- | ------------ |
924| [DotIndicator](#dotindicator10) | 圆点指示器。 |
925
926### selectedItemWidth
927
928selectedItemWidth(value: Length): DotIndicator
929
930选中Swiper组件圆点导航指示器的宽,不支持设置百分比。
931
932**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
933
934**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
935
936**系统能力:** SystemCapability.ArkUI.ArkUI.Full
937
938**参数:**
939
940| 参数名 | 类型                         | 必填 | 说明                                                         |
941| ------ | ---------------------------- | ---- | ------------------------------------------------------------ |
942| value  | [Length](ts-types.md#length) | 是   | 设置选中Swiper组件圆点导航指示器的宽,不支持设置百分比。<br/>默认值:12<br/>单位:vp |
943
944**返回值:**
945
946| 类型                            | 说明         |
947| ------------------------------- | ------------ |
948| [DotIndicator](#dotindicator10) | 圆点指示器。 |
949
950### selectedItemHeight
951
952selectedItemHeight(value: Length): DotIndicator
953
954选中Swiper组件圆点导航指示器的高,不支持设置百分比。
955
956**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
957
958**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
959
960**系统能力:** SystemCapability.ArkUI.ArkUI.Full
961
962**参数:**
963
964| 参数名 | 类型                         | 必填 | 说明                                                         |
965| ------ | ---------------------------- | ---- | ------------------------------------------------------------ |
966| value  | [Length](ts-types.md#length) | 是   | 设置选中Swiper组件圆点导航指示器的高,不支持设置百分比。<br/>默认值:6<br/>单位:vp |
967
968**返回值:**
969
970| 类型                            | 说明         |
971| ------------------------------- | ------------ |
972| [DotIndicator](#dotindicator10) | 圆点指示器。 |
973
974### mask
975
976mask(value: boolean): DotIndicator
977
978是否显示Swiper组件圆点导航指示器的蒙版样式。
979
980**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
981
982**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
983
984**系统能力:** SystemCapability.ArkUI.ArkUI.Full
985
986**参数:**
987
988| 参数名 | 类型    | 必填 | 说明                                                         |
989| ------ | ------- | ---- | ------------------------------------------------------------ |
990| value  | boolean | 是   | 设置是否显示Swiper组件圆点导航指示器的蒙版样式。<br/>默认值:false |
991
992**返回值:**
993
994| 类型                            | 说明         |
995| ------------------------------- | ------------ |
996| [DotIndicator](#dotindicator10) | 圆点指示器。 |
997
998### color
999
1000color(value: ResourceColor): DotIndicator
1001
1002Swiper组件圆点导航指示器的颜色。
1003
1004**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
1005
1006**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1007
1008**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1009
1010**参数:**
1011
1012| 参数名 | 类型                                       | 必填 | 说明                                                         |
1013| ------ | ------------------------------------------ | ---- | ------------------------------------------------------------ |
1014| value  | [ResourceColor](ts-types.md#resourcecolor) | 是   | 设置Swiper组件圆点导航指示器的颜色。<br/>默认值:'\#182431'(10%透明度) |
1015
1016**返回值:**
1017
1018| 类型                            | 说明         |
1019| ------------------------------- | ------------ |
1020| [DotIndicator](#dotindicator10) | 圆点指示器。 |
1021
1022### selectedColor
1023
1024selectedColor(value: ResourceColor): DotIndicator
1025
1026选中Swiper组件圆点导航指示器的颜色。
1027
1028**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
1029
1030**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1031
1032**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1033
1034**参数:**
1035
1036| 参数名 | 类型                                       | 必填 | 说明                                                         |
1037| ------ | ------------------------------------------ | ---- | ------------------------------------------------------------ |
1038| value  | [ResourceColor](ts-types.md#resourcecolor) | 是   | 设置选中Swiper组件圆点导航指示器的颜色。<br/>默认值:'\#007DFF' |
1039
1040**返回值:**
1041
1042| 类型                            | 说明         |
1043| ------------------------------- | ------------ |
1044| [DotIndicator](#dotindicator10) | 圆点指示器。 |
1045
1046### maxDisplayCount<sup>12+</sup>
1047
1048maxDisplayCount(maxDisplayCount: number): DotIndicator
1049
1050圆点导航点指示器样式下,导航点显示个数最大值。
1051
1052单独导航点组件在没有和Swiper绑定使用时,该属性不生效。
1053
1054**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1055
1056**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1057
1058**参数:**
1059
1060| 参数名          | 类型   | 必填 | 说明                                                         |
1061| --------------- | ------ | ---- | ------------------------------------------------------------ |
1062| maxDisplayCount | number | 是   | 设置圆点导航点指示器样式下,导航点显示个数最大值,当实际导航点个数大于最大导航点个数时,会生效超长效果样式,样式如示例5所示。<br/>默认值:这个属性没有默认值,如果设置异常值那等同于没有超长显示效果。<br/>取值范围:6-9<br/>**说明:** <br/>1、超长显示场景,目前暂时不支持交互功能(包括:手指点击拖拽、鼠标操作等)。<br/>2、在超长显示场景下,中间页面对应的选中导航点的位置,并不是完全固定的,取决于之前的翻页操作序列。<br/>3、当前仅支持displayCount为1的场景。 |
1063
1064**返回值:**
1065
1066| 类型                            | 说明         |
1067| ------------------------------- | ------------ |
1068| [DotIndicator](#dotindicator10) | 圆点指示器。 |
1069
1070### constructor
1071
1072constructor()
1073
1074DotIndicator的构造函数。
1075
1076**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
1077
1078**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1079
1080**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1081
1082>**说明:**
1083>
1084>按压导航点时,导航点会放大至1.33倍显示,因此非按压态时导航点的可见范围边界至实际范围边界存在一定距离,该距离会随着itemWidth、itemHeight、selectedItemWidth、selectedItemHeight等参数变大而变大。
1085
1086## DigitIndicator<sup>10+</sup>
1087
1088构造数字指示器的样式,继承自[Indicator](#indicator10)。
1089
1090**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
1091
1092**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1093
1094**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1095
1096>**说明:**
1097>
1098>按组翻页时,数字导航点显示的子节点数量,不包括占位节点。<br/>
1099>数字导航点文本最大的字体缩放倍数[maxFontScale](ts-basic-components-text.md#maxfontscale12)为2。
1100
1101### fontColor
1102
1103fontColor(value: ResourceColor): DigitIndicator
1104
1105Swiper组件数字导航点的字体颜色。
1106
1107**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
1108
1109**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1110
1111**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1112
1113**参数:**
1114
1115| 参数名 | 类型                                       | 必填 | 说明                                                         |
1116| ------ | ------------------------------------------ | ---- | ------------------------------------------------------------ |
1117| value  | [ResourceColor](ts-types.md#resourcecolor) | 是   | 设置Swiper组件数字导航点的字体颜色。<br/>默认值:'\#ff182431' |
1118
1119**返回值:**
1120
1121| 类型                                | 说明         |
1122| ----------------------------------- | ------------ |
1123| [DigitIndicator](#digitindicator10) | 数字指示器。 |
1124
1125### selectedFontColor
1126
1127selectedFontColor(value: ResourceColor): DigitIndicator
1128
1129选中Swiper组件数字导航点的字体颜色。
1130
1131**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
1132
1133**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1134
1135**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1136
1137**参数:**
1138
1139| 参数名 | 类型                                       | 必填 | 说明                                                         |
1140| ------ | ------------------------------------------ | ---- | ------------------------------------------------------------ |
1141| value  | [ResourceColor](ts-types.md#resourcecolor) | 是   | 设置选中Swiper组件数字导航点的字体颜色。<br/>默认值:'\#ff182431' |
1142
1143**返回值:**
1144
1145| 类型                                | 说明         |
1146| ----------------------------------- | ------------ |
1147| [DigitIndicator](#digitindicator10) | 数字指示器。 |
1148
1149### digitFont
1150
1151digitFont(value: Font): DigitIndicator
1152
1153Swiper组件数字导航点的字体样式。
1154
1155**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
1156
1157**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1158
1159**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1160
1161**参数:**
1162
1163| 参数名 | 类型                     | 必填 | 说明                                                         |
1164| ------ | ------------------------ | ---- | ------------------------------------------------------------ |
1165| value  | [Font](ts-types.md#font) | 是   | 设置Swiper组件数字导航点的字体样式。<br/>只支持Font中size和weight参数,family和style设置不生效。<br/>默认值:<br/>{&nbsp;size:&nbsp;14,&nbsp;weight:&nbsp;FontWeight.Normal&nbsp;} |
1166
1167**返回值:**
1168
1169| 类型                                | 说明         |
1170| ----------------------------------- | ------------ |
1171| [DigitIndicator](#digitindicator10) | 数字指示器。 |
1172
1173### selectedDigitFont
1174
1175selectedDigitFont(value: Font): DigitIndicator
1176
1177选中Swiper组件数字导航点的字体样式。
1178
1179**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
1180
1181**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1182
1183**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1184
1185**参数:**
1186
1187| 参数名 | 类型                     | 必填 | 说明                                                         |
1188| ------ | ------------------------ | ---- | ------------------------------------------------------------ |
1189| value  | [Font](ts-types.md#font) | 是   | 设置选中Swiper组件数字导航点的字体样式。<br/>默认值:<br/>{&nbsp;size:&nbsp;14,&nbsp;weight:&nbsp;FontWeight.Normal&nbsp;} |
1190
1191>**说明:**
1192>
1193> 按组翻页时,数字导航点显示的子节点数量,不包括占位节点。
1194
1195**返回值:**
1196
1197| 类型                                | 说明         |
1198| ----------------------------------- | ------------ |
1199| [DigitIndicator](#digitindicator10) | 数字指示器。 |
1200
1201### constructor
1202
1203constructor()
1204
1205DigitIndicator的构造函数。
1206
1207**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
1208
1209**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1210
1211**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1212
1213## ArrowStyle<sup>10+</sup>对象说明
1214左右箭头属性。
1215
1216**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1217
1218**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1219
1220| 名称              | 类型                                     | 必填  | 说明                                     |
1221| ---------------- | ---------------------------------------- | ---- | ---------------------------------------- |
1222| showBackground   | boolean                                  | 否    | 设置箭头底板是否显示。为true时箭头底板显示,为false时箭头底板不显示。<br/>默认值:false                |
1223| isSidebarMiddle  | boolean                                  | 否    | 设置箭头显示位置。为true时箭头居中显示在swiper组件两侧,为false时显示在导航点指示器两侧。<br/>默认值:false <br/>默认显示在导航点指示器两侧。 |
1224| backgroundSize   | [Length](ts-types.md#length)             | 否    | 设置底板大小。<br/>在导航点两侧显示:<br/>默认值:24vp<br/>在组件两侧显示:<br/>默认值:32vp<br/>不支持设置百分比。 |
1225| backgroundColor  | [ResourceColor](ts-types.md#resourcecolor) | 否    | 设置底板颜色。<br/>在导航点两侧显示:<br/>默认值:'\#00000000'<br/>在组件两侧显示:<br/>默认值:'\#19182431' |
1226| arrowSize        | [Length](ts-types.md#length)             | 否    | 设置箭头大小。<br/>在导航点两侧显示时:<br/>默认值:18vp<br/>在组件两侧显示时:<br/>默认值:24vp<br/>**说明:**<br/>showBackground为true时,arrowSize为backgroundSize的3/4。<br/>不支持设置百分比。 |
1227| arrowColor       | [ResourceColor](ts-types.md#resourcecolor) | 否    | 设置箭头颜色。<br/>默认值:'\#182431'                 |
1228
1229## SwiperAutoFill<sup>10+</sup>
1230
1231自适应属性。
1232
1233**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
1234
1235**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1236
1237**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1238
1239| 名称  | 类型             | 必填 | 说明                             |
1240| ------- | -------------------- | ------ | ------------------------------------ |
1241| minSize | [VP](ts-types.md#vp10) | 是     | 设置元素显示最小宽度。<br/>默认值:0 |
1242
1243## AutoPlayOptions<sup>18+</sup>对象说明
1244
1245自动播放属性。
1246
1247**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
1248
1249**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
1250
1251**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1252
1253| 名称              | 类型                                     | 必填  | 说明                                     |
1254| ---------------- | ---------------------------------------- | ---- | ---------------------------------------- |
1255| stopWhenTouched   | boolean                                  | 是    | 在按下事件中配置子组件是否立即停止播放。<br/>设置为true时,停止播放。设置为false时,自动播放不中断。<br/>默认值:true |
1256
1257## 事件
1258
1259除支持[通用事件](ts-component-general-events.md)外,还支持以下事件:
1260
1261### onChange
1262
1263onChange(event: Callback\<number>)
1264
1265当前显示的子组件索引变化时触发该事件,返回值为当前显示的子组件的索引值。
1266
1267Swiper组件结合LazyForEach使用时,不能在onChange事件里触发子页面UI的刷新。
1268
1269**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
1270
1271**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1272
1273**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1274
1275**参数:**
1276
1277| 参数名 | 类型   | 必填 | 说明                 |
1278| ------ | ------ | ---- | -------------------- |
1279| event  | [Callback](./ts-types.md#callback12)\<number> | 是   | 当前显示元素的索引。 |
1280
1281### onAnimationStart<sup>9+</sup>
1282
1283onAnimationStart(event: OnSwiperAnimationStartCallback)
1284
1285切换动画开始时触发该回调。
1286
1287**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
1288
1289**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1290
1291**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1292
1293**参数:**
1294
1295| 参数名 | 类型   | 必填 | 说明                 |
1296| ------ | ------ | ---- | -------------------- |
1297| event  | [OnSwiperAnimationStartCallback](#onswiperanimationstartcallback18) | 是   | 切换动画开始时触发的回调。 |
1298
1299>**说明:**
1300>
1301>- 当翻页动画时长为0时,只有以下场景会触发该回调:滑动翻页、自动轮播、调用SwiperController.showNext()和SwiperController.showPrevious()接口以及手指点击导航点翻页。
1302
1303### onAnimationEnd<sup>9+</sup>
1304
1305onAnimationEnd(event: OnSwiperAnimationEndCallback)
1306
1307切换动画结束时触发该回调。
1308
1309当Swiper切换动效结束时触发,包括动画过程中手势中断,通过SwiperController调用finishAnimation。
1310
1311**卡片能力:** 从API version 10开始,该接口支持在ArkTS卡片中使用。
1312
1313**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1314
1315**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1316
1317**参数:**
1318
1319| 参数名 | 类型   | 必填 | 说明                 |
1320| ------ | ------ | ---- | -------------------- |
1321| event  | [OnSwiperAnimationEndCallback](#onswiperanimationendcallback18) | 是   | 切换动画结束时触发的回调。 |
1322
1323>**说明:**
1324>
1325>- 当翻页动画时长为0时,只有以下场景会触发该回调:滑动翻页、自动轮播、调用SwiperController.showNext()和SwiperController.showPrevious()接口以及手指点击导航点翻页。
1326
1327### onGestureSwipe<sup>10+</sup>
1328
1329onGestureSwipe(event: OnSwiperGestureSwipeCallback)
1330
1331在页面跟手滑动过程中,逐帧触发该回调。
1332
1333**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1334
1335**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1336
1337**参数:**
1338
1339| 参数名 | 类型   | 必填 | 说明                 |
1340| ------ | ------ | ---- | -------------------- |
1341| event  | [OnSwiperGestureSwipeCallback](#onswipergestureswipecallback18) | 是   | 在页面跟手滑动过程中,逐帧触发的回调。 |
1342
1343### customContentTransition<sup>12+</sup>
1344
1345customContentTransition(transition: SwiperContentAnimatedTransition)
1346
1347自定义Swiper页面切换动画。在页面跟手滑动和离手后执行切换动画的过程中,会对视窗内所有页面逐帧触发回调,开发者可以在回调中设置透明度、缩放比例、位移等属性来自定义切换动画。
1348
1349使用说明:
1350
13511、循环场景下,设置prevMargin和nextMargin属性,使得Swiper前后端显示同一页面时,该接口不生效。<br>2、在页面跟手滑动和离手后执行切换动画的过程中,会对视窗内所有页面逐帧触发[SwiperContentTransitionProxy](#swipercontenttransitionproxy12)回调。例如,当视窗内有下标为0、1的两个页面时,会每帧触发两次index值分别为0和1的回调。<br>3、设置displayCount属性的swipeByGroup参数为true时,若同组中至少有一个页面在视窗内时,则会对同组中所有页面触发回调,若同组所有页面均不在视窗内时,则会一起下渲染树。<br>4、在页面跟手滑动和离手后执行切换动画的过程中,默认动画(页面滑动)依然会发生,若希望页面不滑动,可以设置主轴方向上负的位移(translate属性)来抵消页面滑动。例如:当displayCount属性值为2,视窗内有下标为0、1的两个页面时,页面水平滑动过程中,可以逐帧设置第0页的translate属性在x轴上的值为-position * mainAxisLength来抵消第0页的位移,设置第1页的translate属性在x轴上的值为-(position - 1) * mainAxisLength来抵消第1页的位移。
1352
1353**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1354
1355**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1356
1357**参数:**
1358
1359| 参数名 | 类型 | 必填 | 说明 |
1360| ------ | ---- | ---- | ---- |
1361| transition | [SwiperContentAnimatedTransition](#swipercontentanimatedtransition12) | 是 | Swiper自定义切换动画相关信息。 |
1362
1363### onContentDidScroll<sup>12+</sup>
1364
1365onContentDidScroll(handler: ContentDidScrollCallback)
1366
1367监听Swiper页面滑动事件。
1368
1369使用说明:
1370
13711、循环场景下,设置prevMargin和nextMargin属性,使得Swiper前后端显示同一页面时,该接口不生效。<br>2、在页面滑动过程中,会对视窗内所有页面逐帧触发[ContentDidScrollCallback](#contentdidscrollcallback12)回调。例如,当视窗内有下标为0、1的两个页面时,会每帧触发两次index值分别为0和1的回调。<br>3、设置displayCount属性的swipeByGroup参数为true时,若同组中至少有一个页面在视窗内时,则会对同组中所有页面触发回调。
1372
1373**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1374
1375**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1376
1377**参数:**
1378
1379| 参数名 | 类型 | 必填 | 说明 |
1380| ------ | ---- | ---- | ---- |
1381| handler | [ContentDidScrollCallback](#contentdidscrollcallback12) | 是 | Swiper滑动时触发的回调。 |
1382
1383### onSelected<sup>18+</sup>
1384
1385onSelected(event: Callback\<number>)
1386
1387当选中元素改变时触发该回调,返回值为当前选中的元素的索引值。
1388
1389**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
1390
1391**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
1392
1393**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1394
1395**参数:**
1396
1397| 参数名 | 类型   | 必填 | 说明                 |
1398| ------ | ------ | ---- | -------------------- |
1399| event  | [Callback](./ts-types.md#callback12)\<number> | 是   | 当前选中元素的索引。 |
1400
1401> **说明:**
1402>
1403> onSelected回调中不可修改swiper的index属性,不可调用SwiperController.changeIndex()、SwiperController.showNext()和SwiperController.showPrevious()方法。
1404
1405### onUnselected<sup>18+</sup>
1406
1407onUnselected(event: Callback\<number>)
1408
1409当选中元素改变时触发该回调,返回值为将要隐藏的元素的索引值。
1410
1411**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
1412
1413**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
1414
1415**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1416
1417**参数:**
1418
1419| 参数名 | 类型   | 必填 | 说明                 |
1420| ------ | ------ | ---- | -------------------- |
1421| event  | [Callback](./ts-types.md#callback12)\<number> | 是   | 将要隐藏元素的索引。 |
1422
1423> **说明:**
1424>
1425> onUnselected回调中不可修改swiper的index属性,不可调用SwiperController.changeIndex()、SwiperController.showNext()和SwiperController.showPrevious()方法。
1426
1427### onContentWillScroll<sup>15+</sup>
1428
1429onContentWillScroll(handler: ContentWillScrollCallback)
1430
1431Swiper滑动行为拦截事件,在滑动前触发。Swiper会依据该事件的返回值来决定是否允许此次滑动行为。若返回true,表示允许此次滑动行为,Swiper页面将跟随滑动。若返回false,表示不允许此次滑动,页面将保持静止。
1432
14331. 触发该事件的场景仅限于手势操作,具体包括手指滑动、滚动鼠标滚轮以及使用键盘方向键进行焦点移动。
1434
14352. 在手指滑动的过程中,每帧都将触发该事件,系统会依据事件的返回值判断是否对每帧的滑动做出响应。
1436
14373. 对于滚动鼠标滚轮和使用键盘方向键进行焦点移动的场景,每次翻页操作都会触发一次该事件,翻页是否被允许将根据事件的返回值来决定。
1438
1439**卡片能力:** 从API version 15开始,该接口支持在ArkTS卡片中使用。
1440
1441**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。
1442
1443**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1444
1445**参数:**
1446
1447| 参数名 | 类型 | 必填 | 说明 |
1448| ------ | ---- | ---- | ---- |
1449| handler | [ContentWillScrollCallback](#contentwillscrollcallback15) | 是 | Swiper滑动时触发的回调。 |
1450
1451## OnSwiperAnimationStartCallback<sup>18+</sup>
1452
1453type OnSwiperAnimationStartCallback = (index: number, targetIndex: number, extraInfo: SwiperAnimationEvent) => void
1454
1455切换动画开始时触发的回调。
1456
1457**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
1458
1459**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
1460
1461**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1462
1463**参数:**
1464
1465| 参数名                    | 类型                                                       | 必填 | 说明                                                         |
1466| ------------------------- | ---------------------------------------------------------- | ---- | ------------------------------------------------------------ |
1467| index                     | number                                                     | 是   | 当前显示元素的索引。多列Swiper时,index为最左侧组件的索引。                                         |
1468| targetIndex<sup>10+</sup> | number                                                     | 是   | 切换动画目标元素的索引。                                     |
1469| extraInfo<sup>10+</sup>   | [SwiperAnimationEvent](#swiperanimationevent10对象说明) | 是   | 动画相关信息,包括主轴方向上当前显示元素和目标元素相对Swiper起始位置的位移,以及离手速度。 |
1470
1471## OnSwiperAnimationEndCallback<sup>18+</sup>
1472
1473type OnSwiperAnimationEndCallback = (index: number, extraInfo: SwiperAnimationEvent) => void
1474
1475切换动画结束时触发的回调。
1476
1477**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
1478
1479**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
1480
1481**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1482
1483**参数:**
1484
1485| 参数名                  | 类型                                                       | 必填 | 说明                                                         |
1486| ----------------------- | ---------------------------------------------------------- | ---- | ------------------------------------------------------------ |
1487| index                   | number                                                     | 是   | 当前显示元素的索引。多列Swiper时,index为最左侧组件的索引。                                         |
1488| extraInfo<sup>10+</sup> | [SwiperAnimationEvent](#swiperanimationevent10对象说明) | 是   | 动画相关信息,只返回主轴方向上当前显示元素相对于Swiper起始位置的位移。 |
1489
1490## OnSwiperGestureSwipeCallback<sup>18+</sup>
1491
1492type OnSwiperGestureSwipeCallback = (index: number, extraInfo: SwiperAnimationEvent) => void
1493
1494在页面跟手滑动过程中,逐帧触发的回调。
1495
1496**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
1497
1498**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1499
1500**参数:**
1501
1502| 参数名    | 类型                                                       | 必填 | 说明                                                         |
1503| --------- | ---------------------------------------------------------- | ---- | ------------------------------------------------------------ |
1504| index     | number                                                     | 是   | 当前显示元素的索引。多列Swiper时,index为最左侧组件的索引。                                         |
1505| extraInfo | [SwiperAnimationEvent](#swiperanimationevent10对象说明) | 是   | 动画相关信息,只返回主轴方向上当前显示元素相对于Swiper起始位置的位移。 |
1506
1507## ContentDidScrollCallback<sup>12+</sup>
1508
1509type ContentDidScrollCallback = (selectedIndex: number, index: number, position: number, mainAxisLength: number) => void
1510
1511Swiper滑动时触发的回调,参数可参考[SwiperContentTransitionProxy](#swipercontenttransitionproxy12)中的说明。
1512
1513**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1514
1515**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1516
1517| 参数名 | 类型 | 必填 | 说明 |
1518| ------ | ---- | ---- | ---- |
1519| selectedIndex | number | 是 | 当前选中页面的索引。 |
1520| index | number | 是 | 视窗内页面的索引。 |
1521| position | number | 是 | index页面相对于Swiper主轴起始位置(selectedIndex对应页面的起始位置)的移动比例。 |
1522| mainAxisLength | number | 是 | index对应页面在主轴方向上的长度,单位vp。 |
1523
1524## ContentWillScrollCallback<sup>15+</sup>
1525
1526type ContentWillScrollCallback = (result: SwiperContentWillScrollResult) => boolean
1527
1528Swiper即将滑动前触发的回调,返回值表示是否允许此次滑动。
1529
1530**卡片能力:** 从API version 15开始,该接口支持在ArkTS卡片中使用。
1531
1532**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。
1533
1534**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1535
1536**参数:**
1537
1538| 参数名 | 类型 | 必填 | 说明 |
1539| ------ | ---- | ---- | ---- |
1540| result | [SwiperContentWillScrollResult](#swipercontentwillscrollresult15对象说明) | 是 | 即将滑动的相关信息,主要包括:当前页面对应的index、滑动方向上即将显示的页面index和此次滑动的位移。 |
1541
1542**返回值:**
1543
1544| 类型 | 说明 |
1545| ------ | ---- |
1546| boolean | Swiper是否响应本次滑动,true表示响应,false表示不响应。 |
1547
1548## SwiperContentWillScrollResult<sup>15+</sup>对象说明
1549
1550滑动的相关信息,主要包括:当前页面对应的index、滑动方向上即将显示的页面index和此次滑动的位移。
1551
1552**卡片能力:** 从API version 15开始,该接口支持在ArkTS卡片中使用。
1553
1554**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。
1555
1556**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1557
1558| 名称 | 类型 | 必填 | 说明 |
1559| ------ | ---- | ---- | ---- |
1560| currentIndex | number | 是 | 当前页面对应的index。在一次跟手滑动过程中,只要手指未离开屏幕,该值将保持不变,即使该页面已完全移出视窗,如在涉及多个页面的场景中。 |
1561| comingIndex | number | 是 | 滑动方向上即将显示的页面index。 |
1562| offset | number | 是 | 此次滑动的位移,带有符号,正负分别指示不同的翻页方向。正数表示从index=1向index=0翻页,负数表示从index=0向index=1翻页。<br>在手指滑动的场景中,该值为滑动事件中每帧传递下来的偏移量。在滚动鼠标滚轮和使用键盘方向键导航的场景中,该值代表即将翻页的距离。 |
1563
1564## SwiperAnimationEvent<sup>10+</sup>对象说明
1565
1566Swiper组件动画相关信息集合。
1567
1568**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
1569
1570**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1571
1572| 名称            | 类型       | 只读 | 可选 | 说明                                       |
1573| ------------- | ----------- | ---- | ---- |------------------------------- |
1574| currentOffset | number | 否 | 否 | Swiper当前显示元素在主轴方向上,相对于Swiper起始位置的位移。单位VP,默认值为0。|
1575| targetOffset | number | 否 | 否 | Swiper动画目标元素在主轴方向上,相对于Swiper起始位置的位移。单位VP,默认值为0。|
1576| velocity | number | 否 | 否 | Swiper离手动画开始时的离手速度。单位VP/S,默认值为0。|
1577
1578## SwiperContentAnimatedTransition<sup>12+</sup>
1579
1580Swiper自定义切换动画相关信息。
1581
1582**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1583
1584**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1585
1586| 名称 | 类型 | 必填 | 说明 |
1587| ------ | ---- | ---- | ---- |
1588| timeout | number | 否 | Swiper自定义切换动画超时时间。从页面执行默认动画(页面滑动)至移出视窗外的第一帧开始计时,如果到达该时间后,开发者仍未调用[SwiperContentTransitionProxy](#swipercontenttransitionproxy12)的finishTransition接口通知Swiper组件此页面的自定义动画已结束,那么组件就会认为此页面的自定义动画已结束,立即将该页面节点下渲染树。单位ms,默认值为0。 |
1589| transition | Callback<[SwiperContentTransitionProxy](#swipercontenttransitionproxy12)> | 是 | 自定义切换动画具体内容。 |
1590
1591## SwiperContentTransitionProxy<sup>12+</sup>
1592
1593Swiper自定义切换动画执行过程中,返回给开发者的proxy对象。开发者可通过该对象获取自定义动画视窗内的页面信息,同时,也可以通过调用该对象的finishTransition接口通知Swiper组件页面自定义动画已结束。
1594
1595**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1596
1597**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1598
1599### 属性
1600
1601| 名称 | 类型 | 只读 | 可选 | 说明 |
1602| ---- | ---- | --- | ---- | --- |
1603| selectedIndex | number | 否 | 否 | 当前选中页面的索引。 |
1604| index | number | 否 | 否 | 视窗内页面的索引。 |
1605| position | number | 否 | 否 | index页面相对于Swiper主轴起始位置(selectedIndex对应页面的起始位置)的移动比例。 |
1606| mainAxisLength | number | 否 | 否 | index对应页面在主轴方向上的长度,单位vp。 |
1607
1608>**说明:**
1609>
1610>- 例如,当前选中的子组件的索引为0,从第0页切换到第1页的动画过程中,每帧都会对视窗内所有页面触发回调,当视窗内有第0页和第1页两页时,每帧会触发两次回调。其中,第一次回调的selectedIndex为0、index为0、position为当前帧第0页相对于动画开始前第0页的移动比例,mainAxisLength为主轴方向上第0页的长度。第二次回调的selectedIndex仍为0、index为1、position为当前帧第1页相对于动画开始前第0页的移动比例,mainAxisLength为主轴方向上第1页的长度。
1611>
1612>- 若动画曲线为弹簧插值曲线,从第0页切换到第1页的动画过程中,可能会因为离手时的位置和速度,先过滑到第2页,再回弹到第1页,该过程中每帧会对视窗内第1页和第2页触发回调。
1613
1614
1615### finishTransition<sup>12+</sup>
1616
1617finishTransition(): void
1618
1619通知Swiper组件,此页面的自定义动画已结束。
1620
1621**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
1622
1623**系统能力:** SystemCapability.ArkUI.ArkUI.Full
1624
1625## 示例
1626
1627### 示例1(设置导航点交互及翻页动效)
1628
1629该示例通过changeIndex接口设置SwiperAnimationMode动效模式,实现了Swiper组件翻页至指定页面。
1630
1631```ts
1632// xxx.ets
1633class MyDataSource implements IDataSource {
1634  private list: number[] = []
1635
1636  constructor(list: number[]) {
1637    this.list = list
1638  }
1639
1640  totalCount(): number {
1641    return this.list.length
1642  }
1643
1644  getData(index: number): number {
1645    return this.list[index]
1646  }
1647
1648  registerDataChangeListener(listener: DataChangeListener): void {
1649  }
1650
1651  unregisterDataChangeListener() {
1652  }
1653}
1654
1655@Entry
1656@Component
1657struct SwiperExample {
1658  private swiperController: SwiperController = new SwiperController()
1659  private data: MyDataSource = new MyDataSource([])
1660
1661  aboutToAppear(): void {
1662    let list: number[] = []
1663    for (let i = 1; i <= 10; i++) {
1664      list.push(i);
1665    }
1666    this.data = new MyDataSource(list)
1667  }
1668
1669  build() {
1670    Column({ space: 5 }) {
1671      Swiper(this.swiperController) {
1672        LazyForEach(this.data, (item: string) => {
1673          Text(item.toString())
1674            .width('90%')
1675            .height(160)
1676            .backgroundColor(0xAFEEEE)
1677            .textAlign(TextAlign.Center)
1678            .fontSize(30)
1679        }, (item: string) => item)
1680      }
1681      .cachedCount(2)
1682      .index(1)
1683      .autoPlay(true)
1684      .interval(4000)
1685      .loop(true)
1686      .indicatorInteractive(true)
1687      .duration(1000)
1688      .itemSpace(5)
1689      .prevMargin(35)
1690      .nextMargin(35)
1691      .indicator( // 设置圆点导航点样式
1692        new DotIndicator()
1693          .itemWidth(15)
1694          .itemHeight(15)
1695          .selectedItemWidth(15)
1696          .selectedItemHeight(15)
1697          .color(Color.Gray)
1698          .selectedColor(Color.Blue))
1699      .displayArrow({ // 设置导航点箭头样式
1700        showBackground: true,
1701        isSidebarMiddle: true,
1702        backgroundSize: 24,
1703        backgroundColor: Color.White,
1704        arrowSize: 18,
1705        arrowColor: Color.Blue
1706      }, false)
1707      .curve(Curve.Linear)
1708      .onChange((index: number) => {
1709        console.info(index.toString())
1710      })
1711      .onGestureSwipe((index: number, extraInfo: SwiperAnimationEvent) => {
1712        console.info("index: " + index)
1713        console.info("current offset: " + extraInfo.currentOffset)
1714      })
1715      .onAnimationStart((index: number, targetIndex: number, extraInfo: SwiperAnimationEvent) => {
1716        console.info("index: " + index)
1717        console.info("targetIndex: " + targetIndex)
1718        console.info("current offset: " + extraInfo.currentOffset)
1719        console.info("target offset: " + extraInfo.targetOffset)
1720        console.info("velocity: " + extraInfo.velocity)
1721      })
1722      .onAnimationEnd((index: number, extraInfo: SwiperAnimationEvent) => {
1723        console.info("index: " + index)
1724        console.info("current offset: " + extraInfo.currentOffset)
1725      })
1726
1727      Row({ space: 12 }) {
1728        Button('showPrevious')
1729          .onClick(() => {
1730            this.swiperController.showPrevious()
1731          })
1732        Button('showNext')
1733          .onClick(() => {
1734            this.swiperController.showNext()
1735          })
1736      }.margin(5)
1737      Row({ space: 5 }) {
1738        Button('FAST 0')
1739          .onClick(() => {
1740            this.swiperController.changeIndex(0, SwiperAnimationMode.FAST_ANIMATION)
1741          })
1742        Button('FAST 3')
1743          .onClick(() => {
1744            this.swiperController.changeIndex(3, SwiperAnimationMode.FAST_ANIMATION)
1745          })
1746        Button('FAST ' + 9)
1747          .onClick(() => {
1748            this.swiperController.changeIndex(9, SwiperAnimationMode.FAST_ANIMATION)
1749          })
1750      }.margin(5)
1751    }.width('100%')
1752    .margin({ top: 5 })
1753  }
1754}
1755```
1756
1757![swiper](figures/swiper.gif)
1758
1759### 示例2(设置数字指示器)
1760
1761该示例通过DigitIndicator接口,实现了数字指示器的效果和功能。
1762
1763```ts
1764// xxx.ets
1765class MyDataSource implements IDataSource {
1766  private list: number[] = []
1767
1768  constructor(list: number[]) {
1769    this.list = list
1770  }
1771
1772  totalCount(): number {
1773    return this.list.length
1774  }
1775
1776  getData(index: number): number {
1777    return this.list[index]
1778  }
1779
1780  registerDataChangeListener(listener: DataChangeListener): void {
1781  }
1782
1783  unregisterDataChangeListener() {
1784  }
1785}
1786
1787@Entry
1788@Component
1789struct SwiperExample {
1790  private swiperController: SwiperController = new SwiperController()
1791  private data: MyDataSource = new MyDataSource([])
1792
1793  aboutToAppear(): void {
1794    let list: number[] = []
1795    for (let i = 1; i <= 10; i++) {
1796      list.push(i);
1797    }
1798    this.data = new MyDataSource(list)
1799  }
1800
1801  build() {
1802    Column({ space: 5 }) {
1803      Swiper(this.swiperController) {
1804        LazyForEach(this.data, (item: string) => {
1805          Text(item.toString())
1806            .width('90%')
1807            .height(160)
1808            .backgroundColor(0xAFEEEE)
1809            .textAlign(TextAlign.Center)
1810            .fontSize(30)
1811        }, (item: string) => item)
1812      }
1813      .cachedCount(2)
1814      .index(1)
1815      .autoPlay(true)
1816      .interval(4000)
1817      .indicator(Indicator.digit() // 设置数字导航点样式
1818        .top(200)
1819        .fontColor(Color.Gray)
1820        .selectedFontColor(Color.Gray)
1821        .digitFont({ size: 20, weight: FontWeight.Bold })
1822        .selectedDigitFont({ size: 20, weight: FontWeight.Normal }))
1823      .loop(true)
1824      .duration(1000)
1825      .itemSpace(0)
1826      .displayArrow(true, false)
1827
1828      Row({ space: 12 }) {
1829        Button('showNext')
1830          .onClick(() => {
1831            this.swiperController.showNext()
1832          })
1833        Button('showPrevious')
1834          .onClick(() => {
1835            this.swiperController.showPrevious()
1836          })
1837      }.margin(5)
1838    }.width('100%')
1839    .margin({ top: 5 })
1840  }
1841}
1842```
1843![swiper](figures/swiper-digit.gif)
1844
1845### 示例3(设置按组翻页)
1846
1847该示例通过displayCount属性实现了按组翻页效果。
1848
1849```ts
1850// xxx.ets
1851class MyDataSource implements IDataSource {
1852  private list: number[] = []
1853
1854  constructor(list: number[]) {
1855    this.list = list
1856  }
1857
1858  totalCount(): number {
1859    return this.list.length
1860  }
1861
1862  getData(index: number): number {
1863    return this.list[index]
1864  }
1865
1866  registerDataChangeListener(listener: DataChangeListener): void {
1867  }
1868
1869  unregisterDataChangeListener() {
1870  }
1871}
1872
1873@Entry
1874@Component
1875struct SwiperExample {
1876  private swiperController: SwiperController = new SwiperController()
1877  private data: MyDataSource = new MyDataSource([])
1878
1879  aboutToAppear(): void {
1880    let list: number[] = []
1881    for (let i = 1; i <= 10; i++) {
1882      list.push(i);
1883    }
1884    this.data = new MyDataSource(list)
1885  }
1886
1887  build() {
1888    Column({ space: 5 }) {
1889      Swiper(this.swiperController) {
1890        LazyForEach(this.data, (item: string) => {
1891          Text(item.toString())
1892            .width('90%')
1893            .height(160)
1894            .backgroundColor(0xAFEEEE)
1895            .textAlign(TextAlign.Center)
1896            .fontSize(30)
1897        }, (item: string) => item)
1898      }
1899      .displayCount(3, true)
1900      .autoPlay(true)
1901      .interval(4000)
1902      .loop(true)
1903      .duration(1000)
1904      .itemSpace(10)
1905      .indicator( // 设置圆点导航点样式
1906        new DotIndicator()
1907          .itemWidth(15)
1908          .itemHeight(15)
1909          .selectedItemWidth(15)
1910          .selectedItemHeight(15)
1911          .color(Color.Gray)
1912          .selectedColor(Color.Blue))
1913
1914      Row({ space: 12 }) {
1915        Button('showNext')
1916          .onClick(() => {
1917            this.swiperController.showNext()
1918          })
1919        Button('showPrevious')
1920          .onClick(() => {
1921            this.swiperController.showPrevious()
1922          })
1923      }.margin(5)
1924    }.width('100%')
1925    .margin({ top: 5 })
1926  }
1927}
1928```
1929![swiper](figures/swiper-swipe-by-group.gif)
1930
1931### 示例4(设置自定义页面切换动画)
1932
1933该示例通过customContentTransition接口,实现了自定义Swiper页面按组翻页动画效果。
1934
1935<!--code_no_check-->
1936
1937```ts
1938// EntryAbility.ets
1939import { Configuration, UIAbility } from '@kit.AbilityKit';
1940import { i18n } from '@kit.LocalizationKit';
1941import { CommonUtil } from '../common/CommonUtil';
1942
1943export default class EntryAbility extends UIAbility {
1944  onConfigurationUpdate(newConfig: Configuration): void {
1945    // 监听系统配置变化
1946    if (newConfig.language) {
1947      CommonUtil.setIsRTL(i18n.isRTL(newConfig.language))
1948    }
1949  }
1950}
1951```
1952
1953<!--code_no_check-->
1954
1955```ts
1956// CommonUtil.ets
1957import { i18n, intl } from '@kit.LocalizationKit';
1958
1959export class CommonUtil {
1960  private static isRTL: boolean = i18n.isRTL((new intl.Locale()).language)
1961
1962  public static setIsRTL(isRTL: boolean): void {
1963    CommonUtil.isRTL = isRTL
1964  }
1965
1966  public static getIsRTL(): boolean {
1967    return CommonUtil.isRTL
1968  }
1969}
1970```
1971
1972<!--code_no_check-->
1973
1974```ts
1975// xxx.ets
1976import { CommonUtil } from '../common/CommonUtil';
1977
1978@Entry
1979@Component
1980struct SwiperCustomAnimationExample {
1981  private DISPLAY_COUNT: number = 2
1982  private MIN_SCALE: number = 0.75
1983
1984  @State backgroundColors: Color[] = [Color.Green, Color.Blue, Color.Yellow, Color.Pink, Color.Gray, Color.Orange]
1985  @State opacityList: number[] = []
1986  @State scaleList: number[] = []
1987  @State translateList: number[] = []
1988  @State zIndexList: number[] = []
1989
1990  aboutToAppear(): void {
1991    for (let i = 0; i < this.backgroundColors.length; i++) {
1992      this.opacityList.push(1.0)
1993      this.scaleList.push(1.0)
1994      this.translateList.push(0.0)
1995      this.zIndexList.push(0)
1996    }
1997  }
1998
1999  build() {
2000    Column() {
2001      Swiper() {
2002        ForEach(this.backgroundColors, (backgroundColor: Color, index: number) => {
2003          Text(index.toString()).width('100%').height('100%').fontSize(50).textAlign(TextAlign.Center)
2004            .backgroundColor(backgroundColor)
2005            // 自定义动画变化透明度、缩放页面、抵消系统默认位移、渲染层级等
2006            .opacity(this.opacityList[index])
2007            .scale({ x: this.scaleList[index], y: this.scaleList[index] })
2008            .translate({ x: this.translateList[index] })
2009            .zIndex(this.zIndexList[index])
2010        })
2011      }
2012      .height(300)
2013      .indicator(false)
2014      .displayCount(this.DISPLAY_COUNT, true)
2015      .customContentTransition({
2016        // 页面移除视窗时超时1000ms下渲染树
2017        timeout: 1000,
2018        // 对视窗内所有页面逐帧回调transition,在回调中修改opacity、scale、translate、zIndex等属性值,实现自定义动画
2019        transition: (proxy: SwiperContentTransitionProxy) => {
2020          if (!CommonUtil.getIsRTL()) {
2021            if (proxy.position <= proxy.index % this.DISPLAY_COUNT || proxy.position >= this.DISPLAY_COUNT + proxy.index % this.DISPLAY_COUNT) {
2022              // 同组页面往左滑或往右完全滑出视窗外时,重置属性值
2023              this.opacityList[proxy.index] = 1.0
2024              this.scaleList[proxy.index] = 1.0
2025              this.translateList[proxy.index] = 0.0
2026              this.zIndexList[proxy.index] = 0
2027            } else {
2028              // 同组页面往右滑且未滑出视窗外时,对同组中左右两个页面,逐帧根据position修改属性值,实现两个页面往Swiper中间靠拢并透明缩放的自定义切换动画
2029              if (proxy.index % this.DISPLAY_COUNT === 0) {
2030                this.opacityList[proxy.index] = 1 - proxy.position / this.DISPLAY_COUNT
2031                this.scaleList[proxy.index] = this.MIN_SCALE + (1 - this.MIN_SCALE) * (1 - proxy.position / this.DISPLAY_COUNT)
2032                this.translateList[proxy.index] = -proxy.position * proxy.mainAxisLength + (1 - this.scaleList[proxy.index]) * proxy.mainAxisLength / 2.0
2033              } else {
2034                this.opacityList[proxy.index] = 1 - (proxy.position - 1) / this.DISPLAY_COUNT
2035                this.scaleList[proxy.index] = this.MIN_SCALE + (1 - this.MIN_SCALE) * (1 - (proxy.position - 1) / this.DISPLAY_COUNT)
2036                this.translateList[proxy.index] = -(proxy.position - 1) * proxy.mainAxisLength - (1 - this.scaleList[proxy.index]) * proxy.mainAxisLength / 2.0
2037              }
2038              this.zIndexList[proxy.index] = -1
2039            }
2040          } else {
2041            // 适配镜像
2042            if (proxy.position >= -proxy.index % this.DISPLAY_COUNT || proxy.position <= -this.DISPLAY_COUNT - proxy.index % this.DISPLAY_COUNT) {
2043              // 同组页面往右滑或往左完全滑出视窗外时,重置属性值
2044              this.opacityList[proxy.index] = 1.0
2045              this.scaleList[proxy.index] = 1.0
2046              this.translateList[proxy.index] = 0.0
2047              this.zIndexList[proxy.index] = 0
2048            } else {
2049              // 同组页面往左滑且未滑出视窗外时,对同组中左右两个页面,逐帧根据position修改属性值,实现两个页面往Swiper中间靠拢并透明缩放的自定义切换动画
2050              if (proxy.index % this.DISPLAY_COUNT === 0) {
2051                this.opacityList[proxy.index] = 1 + proxy.position / this.DISPLAY_COUNT
2052                this.scaleList[proxy.index] = this.MIN_SCALE + (1 - this.MIN_SCALE) * (1 + proxy.position / this.DISPLAY_COUNT)
2053                this.translateList[proxy.index] = -proxy.position * proxy.mainAxisLength - (1 - this.scaleList[proxy.index]) * proxy.mainAxisLength / 2.0
2054              } else {
2055                this.opacityList[proxy.index] = 1 + (proxy.position + 1) / this.DISPLAY_COUNT
2056                this.scaleList[proxy.index] = this.MIN_SCALE + (1 - this.MIN_SCALE) * (1 + (proxy.position + 1) / this.DISPLAY_COUNT)
2057                this.translateList[proxy.index] = -(proxy.position + 1) * proxy.mainAxisLength + (1 - this.scaleList[proxy.index]) * proxy.mainAxisLength / 2.0
2058              }
2059              this.zIndexList[proxy.index] = -1
2060            }
2061          }
2062        }
2063      })
2064      .onContentDidScroll((selectedIndex: number, index: number, position: number, mainAxisLength: number) => {
2065        // 监听Swiper页面滑动事件,在该回调中可以实现自定义导航点切换动画等
2066        console.info("onContentDidScroll selectedIndex: " + selectedIndex + ", index: " + index + ", position: " + position + ", mainAxisLength: " + mainAxisLength)
2067      })
2068    }.width('100%')
2069  }
2070}
2071```
2072![swiper](figures/swiper-custom-animation.gif)
2073
2074### 示例5(设置圆点导航点超长显示)
2075
2076该示例通过DotIndicator接口的maxDisplayCount属性,实现了圆点导航点超长显示动画效果。
2077
2078```ts
2079class MyDataSource implements IDataSource {
2080  private list: number[] = []
2081
2082  constructor(list: number[]) {
2083    this.list = list
2084  }
2085
2086  totalCount(): number {
2087    return this.list.length
2088  }
2089
2090  getData(index: number): number {
2091    return this.list[index]
2092  }
2093
2094  registerDataChangeListener(listener: DataChangeListener): void {
2095  }
2096
2097  unregisterDataChangeListener() {
2098  }
2099}
2100
2101@Entry
2102@Component
2103struct Index {
2104  private swiperController: SwiperController = new SwiperController()
2105  private data: MyDataSource = new MyDataSource([])
2106
2107  aboutToAppear(): void {
2108    let list: number[] = []
2109    for (let i = 1; i <= 15; i++) {
2110      list.push(i);
2111    }
2112    this.data = new MyDataSource(list)
2113  }
2114
2115  build() {
2116    Column({ space: 5 }) {
2117      Swiper(this.swiperController) {
2118        LazyForEach(this.data, (item: string) => {
2119          Text(item.toString())
2120            .width('90%')
2121            .height(160)
2122            .backgroundColor(0xAFEEEE)
2123            .textAlign(TextAlign.Center)
2124            .fontSize(30)
2125        }, (item: string) => item)
2126      }
2127      .cachedCount(2)
2128      .index(5)
2129      .autoPlay(true)
2130      .interval(4000)
2131      .loop(true)
2132      .duration(1000)
2133      .itemSpace(0)
2134      .indicator( // 设置圆点导航点样式
2135        new DotIndicator()
2136          .itemWidth(8)
2137          .itemHeight(8)
2138          .selectedItemWidth(16)
2139          .selectedItemHeight(8)
2140          .color(Color.Gray)
2141          .selectedColor(Color.Blue)
2142          .maxDisplayCount(9))
2143      .displayArrow({ // 设置导航点箭头样式
2144        showBackground: true,
2145        isSidebarMiddle: true,
2146        backgroundSize: 24,
2147        backgroundColor: Color.White,
2148        arrowSize: 18,
2149        arrowColor: Color.Blue
2150      }, false)
2151      .curve(Curve.Linear)
2152      Row({ space: 12 }) {
2153        Button('showNext')
2154          .onClick(() => {
2155            this.swiperController.showNext()
2156          })
2157        Button('showPrevious')
2158          .onClick(() => {
2159            this.swiperController.showPrevious()
2160          })
2161      }.margin(5)
2162    }.width('100%')
2163    .margin({ top: 5 })
2164  }
2165}
2166```
2167
2168![swiper](figures/point_animation.gif)
2169
2170### 示例6(预加载子节点)
2171
2172本示例通过preloadItems接口实现了预加载指定子节点。
2173
2174```ts
2175// xxx.ets
2176import { BusinessError } from '@kit.BasicServicesKit'
2177
2178@Entry
2179@Component
2180struct SwiperPreloadItems {
2181  @State currentIndex: number = 1
2182  private swiperController: SwiperController = new SwiperController()
2183  @State arr: string[] = ["0", "1", "2", "3", "4", "5"]
2184
2185  build() {
2186    Column() {
2187      Swiper(this.swiperController) {
2188        ForEach(this.arr, (item: string) => {
2189          MyComponent({ txt: item })
2190        })
2191      }
2192      .cachedCount(1, true)
2193      .width("70%")
2194      .height("50%")
2195
2196
2197      Button('preload items: [2, 3]')
2198        .margin(5)
2199        .onClick(() => {
2200          // 预加载index=2和index=3的子节点
2201          try {
2202            this.swiperController.preloadItems([2, 3])
2203              .then(() => {
2204                console.info('preloadItems [2, 3] success.')
2205              })
2206              .catch((error: BusinessError) => {
2207                console.error('preloadItems [2, 3] failed, error code: ' + error.code + ', error message: ' + error.message)
2208              })
2209          } catch (error) {
2210            console.error('preloadItems [2, 3] failed, error code: ' + error.code + ', error message: ' + error.message)
2211          }
2212
2213        })
2214    }
2215    .width("100%")
2216    .margin(5)
2217  }
2218}
2219
2220@Component
2221struct MyComponent {
2222  private txt: string = ""
2223
2224  aboutToAppear(): void {
2225    console.info('aboutToAppear txt:' + this.txt)
2226  }
2227
2228  aboutToDisappear(): void {
2229    console.info('aboutToDisappear txt:' + this.txt)
2230  }
2231
2232  build() {
2233    Text(this.txt)
2234      .textAlign(TextAlign.Center)
2235      .width('100%')
2236      .height('100%')
2237      .backgroundColor(0xAFEEEE)
2238  }
2239}
2240```
2241
2242### 示例7(实现Tabs与Swiper联动)
2243
2244该示例通过onSelected接口,实现了Tabs与Swiper联动切换。
2245
2246```ts
2247// xxx.ets
2248class MyDataSource implements IDataSource {
2249  private list: number[] = []
2250
2251  constructor(list: number[]) {
2252    this.list = list
2253  }
2254
2255  totalCount(): number {
2256    return this.list.length
2257  }
2258
2259  getData(index: number): number {
2260    return this.list[index]
2261  }
2262
2263  registerDataChangeListener(listener: DataChangeListener): void {
2264  }
2265
2266  unregisterDataChangeListener() {
2267  }
2268}
2269
2270@Entry
2271@Component
2272struct TabsSwiperExample {
2273  @State fontColor: string = '#182431'
2274  @State selectedFontColor: string = '#007DFF'
2275  @State currentIndex: number = 0
2276  private list: number[] = []
2277  private tabsController: TabsController = new TabsController()
2278  private swiperController: SwiperController = new SwiperController()
2279  private swiperData: MyDataSource = new MyDataSource([])
2280
2281  aboutToAppear(): void {
2282    for (let i = 0; i <= 9; i++) {
2283      this.list.push(i);
2284    }
2285    this.swiperData = new MyDataSource(this.list)
2286  }
2287
2288  @Builder tabBuilder(index: number, name: string) {
2289    Column() {
2290      Text(name)
2291        .fontColor(this.currentIndex === index ? this.selectedFontColor : this.fontColor)
2292        .fontSize(16)
2293        .fontWeight(this.currentIndex === index ? 500 : 400)
2294        .lineHeight(22)
2295        .margin({ top: 17, bottom: 7 })
2296      Divider()
2297        .strokeWidth(2)
2298        .color('#007DFF')
2299        .opacity(this.currentIndex === index ? 1 : 0)
2300    }.width('20%')
2301  }
2302
2303  build() {
2304    Column() {
2305      Tabs({ barPosition: BarPosition.Start, controller: this.tabsController }) {
2306        ForEach(this.list, (index: number) =>{
2307          TabContent().tabBar(this.tabBuilder(index, '页签 ' + this.list[index]))
2308        })
2309      }
2310      .onTabBarClick((index: number) => {
2311        this.currentIndex = index
2312        this.swiperController.changeIndex(index, true)
2313      })
2314      .barMode(BarMode.Scrollable)
2315      .backgroundColor('#F1F3F5')
2316      .height(56)
2317      .width('100%')
2318
2319      Swiper(this.swiperController) {
2320        LazyForEach(this.swiperData, (item: string) => {
2321          Text(item.toString())
2322            .onAppear(()=>{
2323              console.info('onAppear ' + item.toString())
2324            })
2325            .onDisAppear(()=>{
2326              console.info('onDisAppear ' + item.toString())
2327            })
2328            .width('100%')
2329            .height('40%')
2330            .backgroundColor(0xAFEEEE)
2331            .textAlign(TextAlign.Center)
2332            .fontSize(30)
2333        }, (item: string) => item)
2334      }
2335      .loop(false)
2336      .onSelected((index: number) => {
2337        console.info("onSelected:" + index)
2338        this.currentIndex = index;
2339        this.tabsController.changeIndex(index)
2340      })
2341    }
2342  }
2343}
2344```
2345![swiper](figures/tabs_swiper.gif)
2346
2347### 示例8(滑动行为拦截事件)
2348
2349本示例通过onContentWillScroll事件实现了单方向的滑动翻页,即只能滑动向前翻页,滑动向后翻页的行为会被拦截。
2350
2351```ts
2352// xxx.ets
2353class MyDataSource implements IDataSource {
2354  private list: number[] = []
2355
2356  constructor(list: number[]) {
2357    this.list = list
2358  }
2359
2360  totalCount(): number {
2361    return this.list.length
2362  }
2363
2364  getData(index: number): number {
2365    return this.list[index]
2366  }
2367
2368  registerDataChangeListener(listener: DataChangeListener): void {
2369  }
2370
2371  unregisterDataChangeListener() {
2372  }
2373}
2374
2375@Entry
2376@Component
2377struct SwiperExample {
2378  private swiperController: SwiperController = new SwiperController()
2379  private data: MyDataSource = new MyDataSource([])
2380  private currentIndex: number = 4
2381
2382  aboutToAppear(): void {
2383    let list: number[] = []
2384    for (let i = 1; i <= 10; i++) {
2385      list.push(i);
2386    }
2387    this.data = new MyDataSource(list)
2388  }
2389
2390  build() {
2391    Column({ space: 5 }) {
2392      Swiper(this.swiperController) {
2393        LazyForEach(this.data, (item: string) => {
2394          Text(item.toString())
2395            .width('90%')
2396            .height(160)
2397            .backgroundColor(0xAFEEEE)
2398            .textAlign(TextAlign.Center)
2399            .fontSize(30)
2400        }, (item: string) => item)
2401      }
2402      .index(this.currentIndex)
2403      .loop(false)
2404      .onChange((index: number) => {
2405        this.currentIndex = index
2406      })
2407      .onContentWillScroll((result: SwiperContentWillScrollResult) => {
2408        if (result.comingIndex > this.currentIndex) {
2409          return false;
2410        }
2411        return true;
2412      })
2413
2414      Row({ space: 12 }) {
2415        Button('showNext')
2416          .onClick(() => {
2417            this.swiperController.showNext()
2418          })
2419        Button('showPrevious')
2420          .onClick(() => {
2421            this.swiperController.showPrevious()
2422          })
2423      }.margin(5)
2424    }.width('100%')
2425    .margin({ top: 5 })
2426  }
2427}
2428```
2429