• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 创建轮播
2
3
4[Swiper](../reference/arkui-ts/ts-container-swiper.md)组件提供滑动轮播显示的能力。Swiper本身是一个容器组件,当设置了多个子组件后,可以对这些子组件进行轮播显示。通常,在一些应用首页显示推荐的内容时,需要用到轮播显示的能力。
5
6
7## 布局与约束
8
9Swiper作为一个容器组件,在自身尺寸属性未被设置时,会自动根据子组件的大小设置自身的尺寸。如果开发者对Swiper组件设置了固定的尺寸,则在轮播显示过程中均以该尺寸生效;否则,在轮播过程中,会根据子组件的大小自动调整自身的尺寸。
10
11
12## 循环播放
13
14通过loop属性控制是否循环播放,该属性默认值为true。
15
16当loop为true时,在显示第一页或最后一页时,可以继续往前切换到前一页或者往后切换到后一页。如果loop为false,则在第一页或最后一页时,无法继续向前或者向后切换页面。
17
18  loop为true:
19
20```ts
21...
22private swiperController: SwiperController = new SwiperController()
23...
24Swiper(this.swiperController) {
25  Text("0")
26    .width('90%')
27    .height('100%')
28    .backgroundColor(Color.Gray)
29    .textAlign(TextAlign.Center)
30    .fontSize(30)
31
32  Text("1")
33    .width('90%')
34    .height('100%')
35    .backgroundColor(Color.Green)
36    .textAlign(TextAlign.Center)
37    .fontSize(30)
38
39  Text("2")
40    .width('90%')
41    .height('100%')
42    .backgroundColor(Color.Blue)
43    .textAlign(TextAlign.Center)
44    .fontSize(30)
45}
46.loop(true)
47```
48
49![loop_true](figures/loop_true.gif)
50
51  loop为false:
52
53```ts
54Swiper(this.swiperController) {
55  Text("0")
56    .width('90%')
57    .height('100%')
58    .backgroundColor(Color.Gray)
59    .textAlign(TextAlign.Center)
60    .fontSize(30)
61
62  Text("1")
63    .width('90%')
64    .height('100%')
65    .backgroundColor(Color.Green)
66    .textAlign(TextAlign.Center)
67    .fontSize(30)
68
69  Text("2")
70    .width('90%')
71    .height('100%')
72    .backgroundColor(Color.Blue)
73    .textAlign(TextAlign.Center)
74    .fontSize(30)
75}
76.loop(false)
77```
78
79![loop_false](figures/loop_false.gif)
80
81
82## 自动轮播
83
84Swiper通过设置autoPlay属性,控制是否自动轮播子组件。该属性默认值为false。
85
86autoPlay为true时,会自动切换播放子组件,子组件与子组件之间的播放间隔通过interval属性设置。interval属性默认值为3000,单位毫秒。
87
88  autoPlay为true:
89
90```ts
91Swiper(this.swiperController) {
92  Text("0")
93    .width('90%')
94    .height('100%')
95    .backgroundColor(Color.Gray)
96    .textAlign(TextAlign.Center)
97    .fontSize(30)
98
99  Text("1")
100    .width('90%')
101    .height('100%')
102    .backgroundColor(Color.Green)
103    .textAlign(TextAlign.Center)
104    .fontSize(30)
105
106  Text("2")
107    .width('90%')
108    .height('100%')
109    .backgroundColor(Color.Pink)
110    .textAlign(TextAlign.Center)
111    .fontSize(30)
112}
113.loop(true)
114.autoPlay(true)
115.interval(1000)
116```
117
118![autoPlay](figures/autoPlay.gif)
119
120
121## 导航点样式
122
123Swiper提供了默认的导航点样式,导航点默认显示在Swiper下方居中位置,开发者也可以通过indicatorStyle属性自定义导航点的位置和样式。
124
125通过indicatorStyle属性,开发者可以设置导航点相对于Swiper组件上下左右四个方位的位置,同时也可以设置每个导航点的尺寸、颜色、蒙层和被选中导航点的颜色。
126
127  导航点使用默认样式:
128
129```ts
130Swiper(this.swiperController) {
131  Text("0")
132    .width('90%')
133    .height('100%')
134    .backgroundColor(Color.Gray)
135    .textAlign(TextAlign.Center)
136    .fontSize(30)
137
138  Text("1")
139    .width('90%')
140    .height('100%')
141    .backgroundColor(Color.Green)
142    .textAlign(TextAlign.Center)
143    .fontSize(30)
144
145  Text("2")
146    .width('90%')
147    .height('100%')
148    .backgroundColor(Color.Pink)
149    .textAlign(TextAlign.Center)
150    .fontSize(30)
151}
152```
153
154![indicator](figures/indicator.PNG)
155
156  自定义导航点样式(示例:导航点直径设为30VP,左边距为0,导航点颜色设为红色):
157
158```ts
159Swiper(this.swiperController) {
160  Text("0")
161    .width('90%')
162    .height('100%')
163    .backgroundColor(Color.Gray)
164    .textAlign(TextAlign.Center)
165    .fontSize(30)
166
167  Text("1")
168    .width('90%')
169    .height('100%')
170    .backgroundColor(Color.Green)
171    .textAlign(TextAlign.Center)
172    .fontSize(30)
173
174  Text("2")
175    .width('90%')
176    .height('100%')
177    .backgroundColor(Color.Pink)
178    .textAlign(TextAlign.Center)
179    .fontSize(30)
180}
181.indicatorStyle({
182  size: 30,
183  left: 0,
184  color: Color.Red
185})
186```
187
188![ind](figures/ind.PNG)
189
190
191## 页面切换方式
192
193Swiper支持三种页面切换方式:手指滑动、点击导航点和通过控制器。
194
195  通过控制器切换页面:
196
197```ts
198@Entry
199@Component
200struct SwiperDemo {
201  private swiperController: SwiperController = new SwiperController();
202
203  build() {
204    Column({ space: 5 }) {
205      Swiper(this.swiperController) {
206        Text("0")
207          .width(250)
208          .height(250)
209          .backgroundColor(Color.Gray)
210          .textAlign(TextAlign.Center)
211          .fontSize(30)
212        Text("1")
213          .width(250)
214          .height(250)
215          .backgroundColor(Color.Green)
216          .textAlign(TextAlign.Center)
217          .fontSize(30)
218        Text("2")
219          .width(250)
220          .height(250)
221          .backgroundColor(Color.Pink)
222          .textAlign(TextAlign.Center)
223          .fontSize(30)
224      }
225      .indicator(true)
226
227      Row({ space: 12 }) {
228        Button('showNext')
229          .onClick(() => {
230            this.swiperController.showNext(); // 通过controller切换到后一页
231          })
232        Button('showPrevious')
233          .onClick(() => {
234            this.swiperController.showPrevious(); // 通过controller切换到前一页
235          })
236      }.margin(5)
237    }.width('100%')
238    .margin({ top: 5 })
239  }
240}
241```
242
243![controll](figures/controll.gif)
244
245
246## 轮播方向
247
248Swiper支持水平和垂直方向上进行轮播,主要通过vertical属性控制。
249
250当vertical为true时,表示在垂直方向上进行轮播;为false时,表示在水平方向上进行轮播。vertical默认值为false。
251
252
253  设置水平方向上轮播:
254
255```ts
256Swiper(this.swiperController) {
257  ...
258}
259.indicator(true)
260.vertical(false)
261```
262
263
264![截图2](figures/截图2.PNG)
265
266
267  设置垂直方向轮播:
268
269```ts
270Swiper(this.swiperController) {
271  ...
272}
273.indicator(true)
274.vertical(true)
275```
276
277
278![截图3](figures/截图3.PNG)
279
280
281## 每页显示多个子页面
282
283Swiper支持在一个页面内同时显示多个子组件,通过[displayCount](../reference/arkui-ts/ts-container-swiper.md#属性)属性设置。
284
285  设置一个页面内显示两个子组件:
286
287```ts
288Swiper(this.swiperController) {
289  Text("0")
290    .width(250)
291    .height(250)
292    .backgroundColor(Color.Gray)
293    .textAlign(TextAlign.Center)
294    .fontSize(30)
295  Text("1")
296    .width(250)
297    .height(250)
298    .backgroundColor(Color.Green)
299    .textAlign(TextAlign.Center)
300    .fontSize(30)
301  Text("2")
302    .width(250)
303    .height(250)
304    .backgroundColor(Color.Pink)
305    .textAlign(TextAlign.Center)
306    .fontSize(30)
307  Text("3")
308    .width(250)
309    .height(250)
310    .backgroundColor(Color.Blue)
311    .textAlign(TextAlign.Center)
312    .fontSize(30)
313}
314.indicator(true)
315.displayCount(2)
316```
317
318![two](figures/two.PNG)
319