1e41f4b71Sopenharmony_ci# <swiper> Development
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ci
4e41f4b71Sopenharmony_ciThe **<swiper>** component is a sliding container used to switch between child components. For details, see [swiper](../reference/apis-arkui/arkui-js/js-components-container-swiper.md).
5e41f4b71Sopenharmony_ci
6e41f4b71Sopenharmony_ci
7e41f4b71Sopenharmony_ci## Creating a <swiper> Component
8e41f4b71Sopenharmony_ci
9e41f4b71Sopenharmony_ciCreate a **<swiper>** component in the .hml file under **pages/index**.
10e41f4b71Sopenharmony_ci
11e41f4b71Sopenharmony_ci```html
12e41f4b71Sopenharmony_ci<!-- xxx.hml-->
13e41f4b71Sopenharmony_ci<div class="container">
14e41f4b71Sopenharmony_ci  <swiper>
15e41f4b71Sopenharmony_ci    <div class="item" style="background-color: #bf45ea;">
16e41f4b71Sopenharmony_ci      <text>item1</text>
17e41f4b71Sopenharmony_ci    </div>
18e41f4b71Sopenharmony_ci    <div class="item" style="background-color: #088684;">
19e41f4b71Sopenharmony_ci      <text>item2</text>
20e41f4b71Sopenharmony_ci    </div>
21e41f4b71Sopenharmony_ci    <div class="item" style="background-color: #7786ee;">
22e41f4b71Sopenharmony_ci      <text>item3</text>
23e41f4b71Sopenharmony_ci    </div>
24e41f4b71Sopenharmony_ci  </swiper>
25e41f4b71Sopenharmony_ci</div>
26e41f4b71Sopenharmony_ci```
27e41f4b71Sopenharmony_ci
28e41f4b71Sopenharmony_ci```css
29e41f4b71Sopenharmony_ci/* xxx.css */
30e41f4b71Sopenharmony_ci.container{
31e41f4b71Sopenharmony_ci  width: 100%;
32e41f4b71Sopenharmony_ci  height: 100%;
33e41f4b71Sopenharmony_ci  flex-direction: column;
34e41f4b71Sopenharmony_ci  background-color: #F1F3F5;
35e41f4b71Sopenharmony_ci  align-items: center;
36e41f4b71Sopenharmony_ci  justify-content: center;
37e41f4b71Sopenharmony_ci  width: 100%;
38e41f4b71Sopenharmony_ci}
39e41f4b71Sopenharmony_ciswiper{
40e41f4b71Sopenharmony_ci  height: 30%;
41e41f4b71Sopenharmony_ci}
42e41f4b71Sopenharmony_ci.item{
43e41f4b71Sopenharmony_ci  width: 100%;
44e41f4b71Sopenharmony_ci  height: 500px;
45e41f4b71Sopenharmony_ci}
46e41f4b71Sopenharmony_citext{
47e41f4b71Sopenharmony_ci  width: 100%;
48e41f4b71Sopenharmony_ci  height: 100%;
49e41f4b71Sopenharmony_ci  text-align: center;
50e41f4b71Sopenharmony_ci  font-size: 50px;
51e41f4b71Sopenharmony_ci  color: white;
52e41f4b71Sopenharmony_ci}
53e41f4b71Sopenharmony_ci```
54e41f4b71Sopenharmony_ci
55e41f4b71Sopenharmony_ci
56e41f4b71Sopenharmony_ci![en-us_image_0000001232003028](figures/en-us_image_0000001232003028.gif)
57e41f4b71Sopenharmony_ci
58e41f4b71Sopenharmony_ci
59e41f4b71Sopenharmony_ci> **NOTE**
60e41f4b71Sopenharmony_ci>
61e41f4b71Sopenharmony_ci> The **&lt;swiper&gt;** component supports child components except **&lt;list&gt;**.
62e41f4b71Sopenharmony_ci
63e41f4b71Sopenharmony_ci
64e41f4b71Sopenharmony_ci## Adding Attributes
65e41f4b71Sopenharmony_ci
66e41f4b71Sopenharmony_ciWhen **loop** is set to **false**, the **autoplay** attribute is added to the **&lt;swiper&gt;** component and the autoplay interval (**interval**) is set. The component automatically switches between child components and stops at the last one. Add the **digital** attribute to enable the digital navigation point and set **scrolleffect** to **fade**.
67e41f4b71Sopenharmony_ci
68e41f4b71Sopenharmony_ci
69e41f4b71Sopenharmony_ci```html
70e41f4b71Sopenharmony_ci<!-- xxx.hml-->
71e41f4b71Sopenharmony_ci<div class="container">
72e41f4b71Sopenharmony_ci  <swiper index="1"  autoplay="true" interval="2000" indicator="true" digital="true" duration="500"
73e41f4b71Sopenharmony_ci  scrolleffect="fade" loop="false">
74e41f4b71Sopenharmony_ci    <div class="item" style="background-color: #bf45ea;">
75e41f4b71Sopenharmony_ci      <text>item1</text>
76e41f4b71Sopenharmony_ci    </div>
77e41f4b71Sopenharmony_ci    <div class="item" style="background-color: #088684;">
78e41f4b71Sopenharmony_ci      <text>item2</text>
79e41f4b71Sopenharmony_ci    </div>
80e41f4b71Sopenharmony_ci    <div class="item" style="background-color: #7786ee;">
81e41f4b71Sopenharmony_ci      <text>item3</text>
82e41f4b71Sopenharmony_ci    </div>
83e41f4b71Sopenharmony_ci    <div class="item" style="background-color: #c88cee;">
84e41f4b71Sopenharmony_ci      <text>item4</text>
85e41f4b71Sopenharmony_ci    </div>
86e41f4b71Sopenharmony_ci  </swiper>
87e41f4b71Sopenharmony_ci</div>
88e41f4b71Sopenharmony_ci```
89e41f4b71Sopenharmony_ci
90e41f4b71Sopenharmony_ci
91e41f4b71Sopenharmony_ci```css
92e41f4b71Sopenharmony_ci/* xxx.css */
93e41f4b71Sopenharmony_ci.container{
94e41f4b71Sopenharmony_ci  width: 100%;
95e41f4b71Sopenharmony_ci  height: 100%;
96e41f4b71Sopenharmony_ci  flex-direction: column;
97e41f4b71Sopenharmony_ci  background-color: #F1F3F5;
98e41f4b71Sopenharmony_ci  align-items: center;
99e41f4b71Sopenharmony_ci  justify-content: center;
100e41f4b71Sopenharmony_ci}
101e41f4b71Sopenharmony_ciswiper{
102e41f4b71Sopenharmony_ci  height: 30%;
103e41f4b71Sopenharmony_ci}
104e41f4b71Sopenharmony_ci.item{
105e41f4b71Sopenharmony_ci  width: 100%;
106e41f4b71Sopenharmony_ci  height: 500px;
107e41f4b71Sopenharmony_ci}
108e41f4b71Sopenharmony_citext{
109e41f4b71Sopenharmony_ci  width: 100%;
110e41f4b71Sopenharmony_ci  height: 100%;
111e41f4b71Sopenharmony_ci  text-align: center;
112e41f4b71Sopenharmony_ci  font-size: 50px;
113e41f4b71Sopenharmony_ci  color: white;
114e41f4b71Sopenharmony_ci}
115e41f4b71Sopenharmony_ci```
116e41f4b71Sopenharmony_ci
117e41f4b71Sopenharmony_ci![en-us_image_0000001181655292](figures/en-us_image_0000001181655292.gif)
118e41f4b71Sopenharmony_ci
119e41f4b71Sopenharmony_ci> **NOTE**
120e41f4b71Sopenharmony_ci> - The **digital** attribute takes effect only when the **indicator** attribute is set to **true**.
121e41f4b71Sopenharmony_ci> 
122e41f4b71Sopenharmony_ci> - The **loop** attribute takes effect only when there are two or more than two child components of the **&lt;swiper&gt;** component.
123e41f4b71Sopenharmony_ci> 
124e41f4b71Sopenharmony_ci> - The **scrolleffect** attribute takes effect only when the **loop** attribute value is set to **false**.
125e41f4b71Sopenharmony_ci
126e41f4b71Sopenharmony_ci
127e41f4b71Sopenharmony_ci## Setting Styles
128e41f4b71Sopenharmony_ci
129e41f4b71Sopenharmony_ciSet the width and height of the **&lt;swiper&gt;** component, the indicator's size (**indicator-size**), color (**indicator-color**), relative position (**indicator-top**), and color when it is selected (**indicator-selected-color**).
130e41f4b71Sopenharmony_ci
131e41f4b71Sopenharmony_ci
132e41f4b71Sopenharmony_ci```html
133e41f4b71Sopenharmony_ci<!-- xxx.hml-->
134e41f4b71Sopenharmony_ci<div class="container">
135e41f4b71Sopenharmony_ci    <swiper index="1" autoplay="true" interval="2000"  duration="500" >
136e41f4b71Sopenharmony_ci        <div class="item" style="background-color: bisque;">
137e41f4b71Sopenharmony_ci            <text>item1</text>
138e41f4b71Sopenharmony_ci        </div>
139e41f4b71Sopenharmony_ci        <div class="item" style="background-color: darkkhaki;">
140e41f4b71Sopenharmony_ci            <text>item2</text>
141e41f4b71Sopenharmony_ci        </div>
142e41f4b71Sopenharmony_ci        <div class="item" style="background-color: cadetblue;">
143e41f4b71Sopenharmony_ci            <text>item3</text>
144e41f4b71Sopenharmony_ci        </div>
145e41f4b71Sopenharmony_ci    </swiper>
146e41f4b71Sopenharmony_ci</div>
147e41f4b71Sopenharmony_ci```
148e41f4b71Sopenharmony_ci
149e41f4b71Sopenharmony_ci
150e41f4b71Sopenharmony_ci```css
151e41f4b71Sopenharmony_ci/* xxx.css */
152e41f4b71Sopenharmony_ci.container{
153e41f4b71Sopenharmony_ci  width: 100%;
154e41f4b71Sopenharmony_ci  height: 100%;
155e41f4b71Sopenharmony_ci  flex-direction: column;
156e41f4b71Sopenharmony_ci  background-color: #F1F3F5;
157e41f4b71Sopenharmony_ci  align-items: center;
158e41f4b71Sopenharmony_ci  justify-content: center;
159e41f4b71Sopenharmony_ci}
160e41f4b71Sopenharmony_ciswiper{
161e41f4b71Sopenharmony_ci  width:  500px;
162e41f4b71Sopenharmony_ci  height: 500px;
163e41f4b71Sopenharmony_ci  border-radius: 250px;
164e41f4b71Sopenharmony_ci  indicator-color: white;
165e41f4b71Sopenharmony_ci  indicator-selected-color: blue;
166e41f4b71Sopenharmony_ci  indicator-size: 40px;
167e41f4b71Sopenharmony_ci  indicator-top: 100px;
168e41f4b71Sopenharmony_ci  overflow: hidden ;
169e41f4b71Sopenharmony_ci}
170e41f4b71Sopenharmony_ci.item{
171e41f4b71Sopenharmony_ci  width: 100%;
172e41f4b71Sopenharmony_ci  height: 500px;
173e41f4b71Sopenharmony_ci}
174e41f4b71Sopenharmony_citext{
175e41f4b71Sopenharmony_ci  width: 100%;
176e41f4b71Sopenharmony_ci  text-align: center;
177e41f4b71Sopenharmony_ci  margin-top: 150px;
178e41f4b71Sopenharmony_ci  font-size: 50px;
179e41f4b71Sopenharmony_ci  color: white;
180e41f4b71Sopenharmony_ci}
181e41f4b71Sopenharmony_ci```
182e41f4b71Sopenharmony_ci
183e41f4b71Sopenharmony_ci![en-us_image_0000001226896657](figures/en-us_image_0000001226896657.gif)
184e41f4b71Sopenharmony_ci
185e41f4b71Sopenharmony_ci
186e41f4b71Sopenharmony_ci## Binding Events
187e41f4b71Sopenharmony_ci
188e41f4b71Sopenharmony_ciCreate two **&lt;text&gt;** components and bind click events. Clicking the component will call **showPrevious** to display the previous child component or **showNext** to display the next child component. Add a **&lt;select&gt;** component. A **change** event is triggered when a user selects a value from the drop-down list box and the **swipeTo** method is called to go to the specified page. Bind the **&lt;swiper&gt;** component with the **change** event (triggered when the index of the currently displayed component changes) and the **finish** event (triggered when the switchover animation ends).
189e41f4b71Sopenharmony_ci
190e41f4b71Sopenharmony_ci
191e41f4b71Sopenharmony_ci```html
192e41f4b71Sopenharmony_ci<!-- xxx.hml-->
193e41f4b71Sopenharmony_ci<div class="container">
194e41f4b71Sopenharmony_ci  <swiper interval="2000" onchange="change" loop="false" onanimationfinish="finish" id="swiper">
195e41f4b71Sopenharmony_ci    <div class="item" style="background-color: #bf45ea">
196e41f4b71Sopenharmony_ci      <text>item1</text>
197e41f4b71Sopenharmony_ci    </div>
198e41f4b71Sopenharmony_ci    <div class="item" style="background-color: #088684;">
199e41f4b71Sopenharmony_ci      <text>item2</text>
200e41f4b71Sopenharmony_ci    </div>
201e41f4b71Sopenharmony_ci    <div class="item" style="background-color: #7786ee;">
202e41f4b71Sopenharmony_ci      <text>item3</text>
203e41f4b71Sopenharmony_ci    </div>
204e41f4b71Sopenharmony_ci    <div class="item" style="background-color: #c88cee;">
205e41f4b71Sopenharmony_ci      <text>item4</text>
206e41f4b71Sopenharmony_ci    </div>
207e41f4b71Sopenharmony_ci  </swiper>
208e41f4b71Sopenharmony_ci  <div class="content">
209e41f4b71Sopenharmony_ci      <button class="pnbtn" onclick="previous">Previous</button>
210e41f4b71Sopenharmony_ci      <select onchange="selectChange">
211e41f4b71Sopenharmony_ci          <option value="0">swipeTo 1</option>
212e41f4b71Sopenharmony_ci          <option value="1">swipeTo 2</option>
213e41f4b71Sopenharmony_ci          <option value="2">swipeTo 3</option>
214e41f4b71Sopenharmony_ci          <option value="3">swipeTo 4</option>
215e41f4b71Sopenharmony_ci      </select>
216e41f4b71Sopenharmony_ci    <button class="pnbtn" onclick="next">Next</button>
217e41f4b71Sopenharmony_ci  </div>
218e41f4b71Sopenharmony_ci</div>
219e41f4b71Sopenharmony_ci```
220e41f4b71Sopenharmony_ci
221e41f4b71Sopenharmony_ci
222e41f4b71Sopenharmony_ci```css
223e41f4b71Sopenharmony_ci/* xxx.css */
224e41f4b71Sopenharmony_ci.container{
225e41f4b71Sopenharmony_ci  width: 100%;
226e41f4b71Sopenharmony_ci  height: 100%;
227e41f4b71Sopenharmony_ci  flex-direction: column;
228e41f4b71Sopenharmony_ci  background-color: #F1F3F5;
229e41f4b71Sopenharmony_ci  align-items: center;
230e41f4b71Sopenharmony_ci  justify-content: center;
231e41f4b71Sopenharmony_ci}
232e41f4b71Sopenharmony_ciswiper{
233e41f4b71Sopenharmony_ci  height: 30%;
234e41f4b71Sopenharmony_ci}
235e41f4b71Sopenharmony_ci.item{
236e41f4b71Sopenharmony_ci  width: 100%;
237e41f4b71Sopenharmony_ci  height: 500px;
238e41f4b71Sopenharmony_ci}
239e41f4b71Sopenharmony_citext{
240e41f4b71Sopenharmony_ci  width: 100%;
241e41f4b71Sopenharmony_ci  height: 100%;
242e41f4b71Sopenharmony_ci  text-align: center;
243e41f4b71Sopenharmony_ci  font-size: 50px;
244e41f4b71Sopenharmony_ci  color: white;
245e41f4b71Sopenharmony_ci}
246e41f4b71Sopenharmony_ciselect{
247e41f4b71Sopenharmony_ci  background-color: white;
248e41f4b71Sopenharmony_ci  width: 250px;
249e41f4b71Sopenharmony_ci  height: 80px;
250e41f4b71Sopenharmony_ci}
251e41f4b71Sopenharmony_ci.content{
252e41f4b71Sopenharmony_ci  margin-top: 100px;
253e41f4b71Sopenharmony_ci  justify-content: space-around;
254e41f4b71Sopenharmony_ci}
255e41f4b71Sopenharmony_ci.pnbtn{
256e41f4b71Sopenharmony_ci  width: 200px;
257e41f4b71Sopenharmony_ci  height: 80px;
258e41f4b71Sopenharmony_ci  font-size: 30px; 
259e41f4b71Sopenharmony_ci}
260e41f4b71Sopenharmony_ci```
261e41f4b71Sopenharmony_ci
262e41f4b71Sopenharmony_ci
263e41f4b71Sopenharmony_ci```js
264e41f4b71Sopenharmony_ci// xxx.js
265e41f4b71Sopenharmony_ciimport promptAction from '@ohos.promptAction';
266e41f4b71Sopenharmony_ciexport default{
267e41f4b71Sopenharmony_ci  change(e){
268e41f4b71Sopenharmony_ci    promptAction.showToast({duration:2000,message:"current index:"+e.index});
269e41f4b71Sopenharmony_ci  },
270e41f4b71Sopenharmony_ci  finish(){
271e41f4b71Sopenharmony_ci    promptAction.showToast({duration:2000,message:"The switchover ends"});
272e41f4b71Sopenharmony_ci  },
273e41f4b71Sopenharmony_ci  selectChange(e){
274e41f4b71Sopenharmony_ci    this.$element('swiper').swipeTo({index: Number(e.newValue)});
275e41f4b71Sopenharmony_ci  },
276e41f4b71Sopenharmony_ci  previous(){
277e41f4b71Sopenharmony_ci    this.$element('swiper').showPrevious();
278e41f4b71Sopenharmony_ci  },
279e41f4b71Sopenharmony_ci  next(){
280e41f4b71Sopenharmony_ci    this.$element('swiper').showNext();
281e41f4b71Sopenharmony_ci  }
282e41f4b71Sopenharmony_ci}
283e41f4b71Sopenharmony_ci```
284e41f4b71Sopenharmony_ci
285e41f4b71Sopenharmony_ci![en-us_image_0000001231843128](figures/en-us_image_0000001231843128.gif)
286e41f4b71Sopenharmony_ci
287e41f4b71Sopenharmony_ci
288e41f4b71Sopenharmony_ci## Example Scenario
289e41f4b71Sopenharmony_ci
290e41f4b71Sopenharmony_ciUse the **&lt;swiper&gt;** component to create an image carousel and a thumbnail module at the bottom of the carousel. After a thumbnail is clicked, the **swipeTo** method is called to switch to the corresponding image.
291e41f4b71Sopenharmony_ci
292e41f4b71Sopenharmony_ci
293e41f4b71Sopenharmony_ci```html
294e41f4b71Sopenharmony_ci<!-- xxx.hml-->
295e41f4b71Sopenharmony_ci<div class="container">
296e41f4b71Sopenharmony_ci  <swiper duration="500" indicator="false" id="swiper" onchange="change">
297e41f4b71Sopenharmony_ci    <div class="item" for="item in list">
298e41f4b71Sopenharmony_ci      <image src="{{item.src}}"></image>
299e41f4b71Sopenharmony_ci    </div>
300e41f4b71Sopenharmony_ci  </swiper>
301e41f4b71Sopenharmony_ci  <div class="content">
302e41f4b71Sopenharmony_ci    <div class="content_item {{index == $idx?'actived':''}}" for="item in list" onclick="imageTo({{$idx}})">
303e41f4b71Sopenharmony_ci      <image src="{{item.src}}"></image>
304e41f4b71Sopenharmony_ci    </div>
305e41f4b71Sopenharmony_ci  </div>
306e41f4b71Sopenharmony_ci</div>
307e41f4b71Sopenharmony_ci```
308e41f4b71Sopenharmony_ci
309e41f4b71Sopenharmony_ci
310e41f4b71Sopenharmony_ci```css
311e41f4b71Sopenharmony_ci/* xxx.css */
312e41f4b71Sopenharmony_ci.container{
313e41f4b71Sopenharmony_ci  flex-direction: column;
314e41f4b71Sopenharmony_ci  background-color: #F1F3F5;
315e41f4b71Sopenharmony_ci  align-items: center;
316e41f4b71Sopenharmony_ci  justify-content: center;
317e41f4b71Sopenharmony_ci  width: 100%;
318e41f4b71Sopenharmony_ci}
319e41f4b71Sopenharmony_ciswiper{
320e41f4b71Sopenharmony_ci  width: 100%;
321e41f4b71Sopenharmony_ci  height: 500px;
322e41f4b71Sopenharmony_ci}
323e41f4b71Sopenharmony_ci.item{
324e41f4b71Sopenharmony_ci  width: 100%;
325e41f4b71Sopenharmony_ci  height: 500px;
326e41f4b71Sopenharmony_ci}
327e41f4b71Sopenharmony_ci.content{
328e41f4b71Sopenharmony_ci  margin-top: -120px;
329e41f4b71Sopenharmony_ci  width: 70%;
330e41f4b71Sopenharmony_ci  display: flex;
331e41f4b71Sopenharmony_ci  justify-content: space-around;
332e41f4b71Sopenharmony_ci  height: 100px;
333e41f4b71Sopenharmony_ci}
334e41f4b71Sopenharmony_ci.content_item{
335e41f4b71Sopenharmony_ci  padding: 5px;
336e41f4b71Sopenharmony_ci  transform: scale(0.5);
337e41f4b71Sopenharmony_ci}
338e41f4b71Sopenharmony_ci.actived{
339e41f4b71Sopenharmony_ci  transform: scale(1);
340e41f4b71Sopenharmony_ci  border: 1px solid #b20937ea;
341e41f4b71Sopenharmony_ci}
342e41f4b71Sopenharmony_ci```
343e41f4b71Sopenharmony_ci
344e41f4b71Sopenharmony_ci
345e41f4b71Sopenharmony_ci```js
346e41f4b71Sopenharmony_ci// xxx.js
347e41f4b71Sopenharmony_ciimport promptAction from '@ohos.promptAction';
348e41f4b71Sopenharmony_ciexport default {
349e41f4b71Sopenharmony_ci  data:{
350e41f4b71Sopenharmony_ci    index: 0,
351e41f4b71Sopenharmony_ci    list:[
352e41f4b71Sopenharmony_ci      {src: 'common/images/1.png'},
353e41f4b71Sopenharmony_ci      {src: 'common/images/2.png'},
354e41f4b71Sopenharmony_ci      {src: 'common/images/3.png'},
355e41f4b71Sopenharmony_ci      {src: 'common/images/4.png'},]
356e41f4b71Sopenharmony_ci    },
357e41f4b71Sopenharmony_ci  imageTo(index){
358e41f4b71Sopenharmony_ci    this.index = index;
359e41f4b71Sopenharmony_ci    this.$element('swiper').swipeTo({index: index});
360e41f4b71Sopenharmony_ci  },
361e41f4b71Sopenharmony_ci  change(e){
362e41f4b71Sopenharmony_ci    this.index = e.index;
363e41f4b71Sopenharmony_ci  }
364e41f4b71Sopenharmony_ci}
365e41f4b71Sopenharmony_ci```
366e41f4b71Sopenharmony_ci
367e41f4b71Sopenharmony_ci![en-us_image_0000001231843132](figures/en-us_image_0000001231843132.gif)