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 57e41f4b71Sopenharmony_ci 58e41f4b71Sopenharmony_ci 59e41f4b71Sopenharmony_ci> **NOTE** 60e41f4b71Sopenharmony_ci> 61e41f4b71Sopenharmony_ci> The **<swiper>** component supports child components except **<list>**. 62e41f4b71Sopenharmony_ci 63e41f4b71Sopenharmony_ci 64e41f4b71Sopenharmony_ci## Adding Attributes 65e41f4b71Sopenharmony_ci 66e41f4b71Sopenharmony_ciWhen **loop** is set to **false**, the **autoplay** attribute is added to the **<swiper>** 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 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 **<swiper>** 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 **<swiper>** 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 184e41f4b71Sopenharmony_ci 185e41f4b71Sopenharmony_ci 186e41f4b71Sopenharmony_ci## Binding Events 187e41f4b71Sopenharmony_ci 188e41f4b71Sopenharmony_ciCreate two **<text>** 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 **<select>** 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 **<swiper>** 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 286e41f4b71Sopenharmony_ci 287e41f4b71Sopenharmony_ci 288e41f4b71Sopenharmony_ci## Example Scenario 289e41f4b71Sopenharmony_ci 290e41f4b71Sopenharmony_ciUse the **<swiper>** 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