ts-container-swiper.md 13.0 KB
Newer Older
Z
zengyawen 已提交
1 2
# Swiper

T
fourth  
tianyu 已提交
3 4
 滑块视图容器,提供子组件滑动轮播显示的能力。 

H
geshi  
HelloCrease 已提交
5
> **说明:**
6
>
Z
zengyawen 已提交
7
> 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
Z
zengyawen 已提交
8

Z
zengyawen 已提交
9

Z
zengyawen 已提交
10
## 子组件
Z
zengyawen 已提交
11 12 13

可以包含子组件。

Y
yamila 已提交
14 15
>  **说明:** 
>
H
HelloCrease 已提交
16
>  子组件类型:系统组件和自定义组件,支持渲染控制类型([if/else](../../quick-start/arkts-rendering-control-ifelse.md)、[ForEach](../../quick-start/arkts-rendering-control-foreach.md)和[LazyForEach](../../quick-start/arkts-rendering-control-lazyforeach.md))。
Y
yamila 已提交
17

Z
zengyawen 已提交
18 19 20

## 接口

L
fix doc  
luoying_ace_admin 已提交
21
Swiper(controller?: SwiperController)
Z
zengyawen 已提交
22

23 24
**参数:** 

T
fourth  
tianyu 已提交
25 26 27
| 参数名        | 参数类型                           | 必填  | 参数描述                 |
| ---------- | ------------------------------------- | ---- | -------------------- |
| controller | [SwiperController](#swipercontroller) | 否   | 给组件绑定一个控制器,用来控制组件翻页。 |
Z
zengyawen 已提交
28 29 30 31


## 属性

T
fourth  
tianyu 已提交
32
除支持[通用属性](ts-universal-attributes-size.md)外,还支持以下属性,不支持[Menu控制](ts-universal-attributes-menu.md)
H
HelloCrease 已提交
33

34 35
| 名称                          | 参数类型                               | 描述                                       |
| --------------------------- | ---------------------------------------- | ---------------------------------------- |
Y
yamila 已提交
36 37
| index                       | number                                   | 设置当前在容器中显示的子组件的索引值。<br/>默认值:0<br/>**说明:** <br/>设置小于0或大于等于子组件数量时,按照默认值0处理。 |
| autoPlay                    | boolean                                  | 子组件是否自动播放。<br/>默认值:false<br/>**说明:** <br/>loop为false时,自动轮播到最后一页时停止轮播。手势切换后不是最后一页时继续播放。 |
38
| interval                    | number                                   | 使用自动播放时播放的时间间隔,单位为毫秒。<br/>默认值:3000                    |
C
chensi10 已提交
39
| indicator<sup>10+</sup>   | [DotIndicator](#dotindicator) \| [DigitIndicator](#digitindicator) \| boolean |  设置可选导航点指示器样式。<br/> \- DotIndicator:圆点指示器样式。<br/> \- DigitIndicator:数字指示器样式。<br/> \- boolean:是否启用导航点指示器。<br/>&nbsp;&nbsp;默认值:true<br/>&nbsp;&nbsp;默认类型:DotIndicator |
40 41 42
| loop                        | boolean                                  | 是否开启循环。<br>设置为true时表示开启循环,在LazyForEach懒循环加载模式下,加载的组件数量建议大于5个。<br/>默认值:true |
| duration                    | number                                   | 子组件切换的动画时长,单位为毫秒。<br/>默认值:400                        |
| vertical                    | boolean                                  | 是否为纵向滑动。<br/>默认值:false                                 |
Y
yamila 已提交
43
| itemSpace                   | number&nbsp;\|&nbsp;string          | 设置子组件与子组件之间间隙。<br/>默认值:0<br/>**说明:** <br/>不支持设置百分比。 |
44 45 46
| displayMode                 | SwiperDisplayMode                        | 主轴方向上元素排列的模式,优先以displayCount设置的个数显示,displayCount未设置时本属性生效。<br/>默认值:SwiperDisplayMode.Stretch |
| cachedCount<sup>8+</sup>    | number                                   | 设置预加载子组件个数。<br/>默认值:1                              |
| disableSwipe<sup>8+</sup>   | boolean                                  | 禁用组件滑动切换功能。<br/>默认值:false                              |
47
| curve<sup>8+</sup>          | [Curve](ts-appendix-enums.md#curve)  \| string | 设置Swiper的动画曲线,默认为淡入淡出曲线,常用曲线参考[Curve枚举说明](ts-appendix-enums.md#curve),也可以通过[插值计算](../apis/js-apis-curve.md)模块提供的接口创建自定义的插值曲线对象。<br/>默认值:Curve.Ease |
H
HelloCrease 已提交
48
| indicatorStyle<sup>8+</sup> | {<br/>left?:&nbsp;[Length](ts-types.md#length),<br/>top?:&nbsp;[Length](ts-types.md#length),<br/>right?:&nbsp;[Length](ts-types.md#length),<br/>bottom?:&nbsp;[Length](ts-types.md#length),<br/>size?:&nbsp;[Length](ts-types.md#length),<br/>mask?:&nbsp;boolean,<br/>color?:&nbsp;[ResourceColor](ts-types.md),<br/>selectedColor?:&nbsp;[ResourceColor](ts-types.md)<br/>} | 设置导航点样式:<br/>\- left: 设置导航点距离Swiper组件左边的距离。<br/>\- top: 设置导航点距离Swiper组件顶部的距离。<br/>\- right: 设置导航点距离Swiper组件右边的距离。<br/>\- bottom: 设置导航点距离Swiper组件底部的距离。<br/>\- size: 设置导航点的直径。<br/>\- mask: 设置是否显示导航点蒙层样式。<br/>\- color: 设置导航点的颜色。<br/>\- selectedColor: 设置选中的导航点的颜色。 |
Y
yamila 已提交
49 50
| displayCount<sup>8+</sup>   | number\|string                                               | 设置一页内元素显示个数。<br/>默认值:1<br/>**说明:** <br/>字符串类型仅支持设置为'auto',显示效果同SwiperDisplayMode.AutoLinear。<br/>使用number类型时,子组件按照主轴均分Swiper宽度(减去displayCount-1的itemSpace)的方式进行主轴拉伸(收缩)布局。 |
| effectMode<sup>8+</sup>     | [EdgeEffect](ts-appendix-enums.md#edgeeffect)  | 滑动效果,目前支持的滑动效果参见EdgeEffect的枚举说明。<br/>默认值:EdgeEffect.Spring<br/>**说明:** <br/>控制器接口调用时不生效回弹。 |
51 52

## SwiperDisplayMode枚举说明
T
fourth  
tianyu 已提交
53 54 55 56 57

| 名称 | 描述 |
| ----------- | ------------------------------------------ |
| Stretch     | Swiper滑动一页的宽度为Swiper组件自身的宽度。|
| AutoLinear  | Swiper滑动一页的宽度为子组件宽度中的最大值。|
58

59
## SwiperController
Z
zengyawen 已提交
60 61 62

Swiper容器组件的控制器,可以将此对象绑定至Swiper组件,然后通过它控制翻页。

63 64 65 66
### showNext

showNext(): void

Y
yamila 已提交
67
翻至下一页。翻页带动效切换过程,时长通过duration指定。
68 69 70 71 72

### showPrevious

showPrevious(): void

Y
yamila 已提交
73
翻至上一页。翻页带动效切换过程,时长通过duration指定。
74 75

### finishAnimation
Z
zengyawen 已提交
76

77 78 79 80 81 82 83 84
finishAnimation(callback?: () => void): void

停止播放动画。

**参数:**

| 参数名    | 参数类型   | 必填项 | 参数描述 |
| --------- | ---------- | ------ | -------- |
85
| callback  | () => void | 否     | 动画结束的回调。 |
Z
zengyawen 已提交
86

C
chensi10 已提交
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
## Indicator<sup>10+</sup>对象说明

设置导航点距离Swiper组件距离。

| 参数名 | 参数类型 | 必填项 | 参数描述                             |
| ------ | -------- | ------ | ------------------------------------ |
| left   | [Length](ts-types.md#length)   | 否     | 设置导航点距离Swiper组件左边的距离。 |
| top    | [Length](ts-types.md#length)   | 否     | 设置导航点距离Swiper组件顶部的距离。 |
| right  | [Length](ts-types.md#length)   | 否     | 设置导航点距离Swiper组件右边的距离。 |
| bottom | [Length](ts-types.md#length)   | 否     | 设置导航点距离Swiper组件底部的距离。 |

### DotIndicator

圆点指示器属性及功能继承自Indicator。

| 参数名             | 参数类型      | 必填项 | 参数描述                                               |
| ------------------ | ------------- | ------ | ------------------------------------------------------ |
Y
yamila 已提交
104 105 106 107 108 109 110
| itemWidth          | [Length](ts-types.md#length)        | 否     | 设置Swiper组件圆点导航指示器的宽。<br/>默认值:6<br/>单位:vp |
| itemHeight         | [Length](ts-types.md#length)        | 否     | 设置Swiper组件圆点导航指示器的高。<br/>默认值:6<br/>单位:vp |
| selectedItemWidth  | [Length](ts-types.md#length)        | 否     | 设置选中Swiper组件圆点导航指示器的宽。<br/>默认值:6<br/>单位:vp |
| selectedItemHeight | [Length](ts-types.md#length)        | 否     | 设置选中Swiper组件圆点导航指示器的高。<br/>默认值:6<br/>单位:vp |
| mask               | boolean       | 否     | 设置是否显示Swiper组件圆点导航指示器的蒙版样式。<br/>默认值:false |
| color              | [ResourceColor](ts-types.md#resourcecolor) | 否     | 设置Swiper组件圆点导航指示器的颜色。<br/>默认值:'\#007DFF' |
| selectedColor      | [ResourceColor](ts-types.md#resourcecolor) | 否     | 设置选中Swiper组件圆点导航指示器的颜色。<br/>默认值:'\#182431'(10%透明度) |
C
chensi10 已提交
111 112 113 114 115 116 117

### DigitIndicator

数字指示器属性及功能继承自Indicator。

| 参数名            | 参数类型                                                     | 必填项 | 参数描述                                                     |
| ----------------- | ------------------------------------------------------------ | ------ | ------------------------------------------------------------ |
Y
yamila 已提交
118 119 120 121
| fontColor         | [ResourceColor](ts-types.md#resourcecolor)                   | 否     | 设置Swiper组件数字导航点的字体颜色。<br/>默认值:'\#ff182431' |
| selectedFontColor | [ResourceColor](ts-types.md#resourcecolor)                   | 否     | 设置选中Swiper组件数字导航点的字体颜色。<br/>默认值:'\#ff182431' |
| digitFont         | {<br/>size?:[Length](ts-types.md#length)<br/>weight?:number \| [FontWeight](ts-appendix-enums.md#fontweight) \| string<br/>} | 否     | 设置Swiper组件数字导航点的字体样式:<br/>\- size:数字导航点指示器的字体大小。<br/>默认值:14vp<br/>\- weight:数字导航点指示器的字重。 |
| selectedDigitFont | {<br/>size?:[Length](ts-types.md#length)<br/>weight?:number \| [FontWeight](ts-appendix-enums.md#fontweight) \| string<br/>} | 否     | 设置选中Swiper组件数字导航点的字体样式:<br/>\- size:数字导航点选中指示器的字体大小。<br/>默认值:14vp<br/>\- weight:数字导航点选中指示器的字重。 |
C
chensi10 已提交
122

Z
zengyawen 已提交
123 124
## 事件

Y
yamila 已提交
125
除支持[通用事件](ts-universal-events-click.md)外,还支持以下事件:
Z
zengyawen 已提交
126

Y
yamila 已提交
127 128 129 130 131
| 名称                                                         | 功能描述                                                     |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| onChange(event: (index: number) => void)                     | 当前显示的子组件索引变化时触发该事件,返回值为当前显示的子组件的索引值。<br/>-&nbsp;index:当前显示元素的索引。<br/>**说明:** <br>Swiper组件结合LazyForEach使用时,不能在onChange事件里触发子页面UI的刷新。 |
| onAnimationStart<sup>9+</sup>(event: (index: number) => void) | 切换动画开始时触发该回调。<br/>-&nbsp;index:当前显示元素的索引。<br/>**说明:** <br/>参数为动画开始前的index值(不是最终结束动画的index值),多列Swiper时,index为最左侧组件的索引。 |
| onAnimationEnd<sup>9+</sup>(event: (index: number) => void)  | 切换动画结束时触发该回调。<br/>-&nbsp;index:当前显示元素的索引。<br/>**说明:** <br/>当Swiper切换动效结束时触发,包括动画过程中手势中断,通过SwiperController调用finishAnimatio。参数为动画结束后的index值,多列Swiper时,index为最左侧组件的索引。 |
Z
zengyawen 已提交
132 133

## 示例
Z
zengyawen 已提交
134

H
geshi  
HelloCrease 已提交
135 136
```ts
// xxx.ets
Z
zengyawen 已提交
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
class MyDataSource implements IDataSource {
  private list: number[] = []
  private listener: DataChangeListener

  constructor(list: number[]) {
    this.list = list
  }

  totalCount(): number {
    return this.list.length
  }

  getData(index: number): any {
    return this.list[index]
  }

  registerDataChangeListener(listener: DataChangeListener): void {
    this.listener = listener
  }

  unregisterDataChangeListener() {
  }
}

Z
zengyawen 已提交
161 162 163 164
@Entry
@Component
struct SwiperExample {
  private swiperController: SwiperController = new SwiperController()
Z
zengyawen 已提交
165 166
  private data: MyDataSource = new MyDataSource([])

167
  aboutToAppear(): void {
Z
zengyawen 已提交
168 169 170 171 172 173
    let list = []
    for (var i = 1; i <= 10; i++) {
      list.push(i.toString());
    }
    this.data = new MyDataSource(list)
  }
Z
zengyawen 已提交
174 175 176 177

  build() {
    Column({ space: 5 }) {
      Swiper(this.swiperController) {
Z
zengyawen 已提交
178
        LazyForEach(this.data, (item: string) => {
179
          Text(item).width('90%').height(160).backgroundColor(0xAFEEEE).textAlign(TextAlign.Center).fontSize(30)
Z
zengyawen 已提交
180
        }, item => item)
Z
zengyawen 已提交
181
      }
Z
zengyawen 已提交
182
      .cachedCount(2)
Z
zengyawen 已提交
183 184 185
      .index(1)
      .autoPlay(true)
      .interval(4000)
186 187
      .indicator(true)
      .loop(true)
Z
zengyawen 已提交
188 189
      .duration(1000)
      .itemSpace(0)
190
      .curve(Curve.Linear)
Z
zengyawen 已提交
191 192 193 194
      .onChange((index: number) => {
        console.info(index.toString())
      })

195 196
      Row({ space: 12 }) {
        Button('showNext')
Z
zengyawen 已提交
197 198 199
          .onClick(() => {
            this.swiperController.showNext()
          })
200
        Button('showPrevious')
Z
zengyawen 已提交
201 202 203
          .onClick(() => {
            this.swiperController.showPrevious()
          })
204 205 206
      }.margin(5)
    }.width('100%')
    .margin({ top: 5 })
Z
zengyawen 已提交
207 208 209
  }
}
```
Y
yamila 已提交
210 211

![swiper](figures/swiper.gif)