ts-container-swiper.md 14.4 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
| 名称                          | 参数类型                               | 描述                                       |
| --------------------------- | ---------------------------------------- | ---------------------------------------- |
L
limeng 已提交
36
| index                       | number                                   | 设置当前在容器中显示的子组件的索引值。<br/>默认值:0<br/>**说明:** <br/>设置小于0或大于等于子组件数量时,按照默认值0处理。<br />从API version 10开始,该属性支持[$$](../../quick-start/arkts-two-way-sync.md)双向绑定变量。 |
Y
yamila 已提交
37
| 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
| displayMode                 | SwiperDisplayMode                        | 主轴方向上元素排列的模式,优先以displayCount设置的个数显示,displayCount未设置时本属性生效。<br/>默认值:SwiperDisplayMode.Stretch |
Y
yamila 已提交
45
| cachedCount<sup>8+</sup>    | number                                   | 设置预加载子组件个数。<br/>默认值:1<br/>**说明:** <br/>cachedCount已经做了预加载的优化,不建议与[LazyForEach](../../quick-start/arkts-rendering-control-lazyforeach.md)一起使用。 |
46
| 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.Linear |
L
luoweibin 已提交
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: 设置导航点的直径,不支持设置百分比。默认值:6vp。<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
| displayArrow<sup>10+</sup> | value:[ArrowStyle](#arrowstyle10) \| boolean,<br/>isHoverShow?: boolean | 设置导航点箭头样式。<br/>默认值:false<br/>isHoverShow:鼠标悬停时显示箭头 |
52 53

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

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

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

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

64 65 66 67
### showNext

showNext(): void

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

### showPrevious

showPrevious(): void

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

### finishAnimation
Z
zengyawen 已提交
77

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

停止播放动画。

**参数:**

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

C
chensi10 已提交
88 89 90 91 92 93
## Indicator<sup>10+</sup>对象说明

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

| 参数名 | 参数类型 | 必填项 | 参数描述                             |
| ------ | -------- | ------ | ------------------------------------ |
L
luoweibin 已提交
94 95 96 97
| left   | [Length](ts-types.md#length)   | 否     | 设置导航点距离Swiper组件左边的距离。<br/>默认值:0<br/>单位:vp |
| top    | [Length](ts-types.md#length)   | 否     | 设置导航点距离Swiper组件顶部的距离。<br/>默认值:0<br/>单位:vp |
| right  | [Length](ts-types.md#length)   | 否     | 设置导航点距离Swiper组件右边的距离。<br/>默认值:0<br/>单位:vp |
| bottom | [Length](ts-types.md#length)   | 否     | 设置导航点距离Swiper组件底部的距离。<br/>默认值:0<br/>单位:vp |
C
chensi10 已提交
98 99 100 101 102 103 104

### DotIndicator

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

| 参数名             | 参数类型      | 必填项 | 参数描述                                               |
| ------------------ | ------------- | ------ | ------------------------------------------------------ |
Y
yamila 已提交
105 106 107 108 109 110 111
| 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 已提交
112 113 114 115 116 117 118

### DigitIndicator

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

| 参数名            | 参数类型                                                     | 必填项 | 参数描述                                                     |
| ----------------- | ------------------------------------------------------------ | ------ | ------------------------------------------------------------ |
Y
yamila 已提交
119 120 121 122
| 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 已提交
123

124 125 126 127 128 129 130 131 132 133 134 135 136 137
### ArrowStyle<sup>10+</sup>对象说明
左右箭头属性。

| 参数名        | 参数类型 | 必填项 | 参数描述 |
| ------------- | -------- | ------ | -------- |
| isShowBackground   | boolean  | 否 | 设置箭头底板是否显示。<br/>默认值:false |
| isSidebarMiddle | boolean  | 否 | 设置箭头是否在内容区两侧居中显示。<br/>默认值:false,默认显示在导航点指示器两侧。|
| backgroundSize     | [Length](ts-types.md#length) | 否 | 设置底板大小。<br/>默认值:24vp |
| backgroundColor    | [ResourceColor](ts-types.md#resourcecolor) | 否 | 设置底板颜色。<br/>默认值:\#19182431 |
| arrowSize     | [Length](ts-types.md#length) | 否 | 设置箭头大小。<br/>默认值:18vp |
| arrowColor    | [ResourceColor](ts-types.md#resourcecolor) | 否 | 设置箭头颜色。<br/>默认值:\#182431 |



Z
zengyawen 已提交
138 139
## 事件

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

Y
yamila 已提交
142 143 144 145 146
| 名称                                                         | 功能描述                                                     |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
| 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 已提交
147 148

## 示例
Z
zengyawen 已提交
149

H
geshi  
HelloCrease 已提交
150 151
```ts
// xxx.ets
Z
zengyawen 已提交
152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175
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 已提交
176 177 178 179
@Entry
@Component
struct SwiperExample {
  private swiperController: SwiperController = new SwiperController()
Z
zengyawen 已提交
180 181
  private data: MyDataSource = new MyDataSource([])

182
  aboutToAppear(): void {
Z
zengyawen 已提交
183 184 185 186 187 188
    let list = []
    for (var i = 1; i <= 10; i++) {
      list.push(i.toString());
    }
    this.data = new MyDataSource(list)
  }
Z
zengyawen 已提交
189 190 191 192

  build() {
    Column({ space: 5 }) {
      Swiper(this.swiperController) {
Z
zengyawen 已提交
193
        LazyForEach(this.data, (item: string) => {
194
          Text(item).width('90%').height(160).backgroundColor(0xAFEEEE).textAlign(TextAlign.Center).fontSize(30)
Z
zengyawen 已提交
195
        }, item => item)
Z
zengyawen 已提交
196
      }
Z
zengyawen 已提交
197
      .cachedCount(2)
Z
zengyawen 已提交
198 199 200
      .index(1)
      .autoPlay(true)
      .interval(4000)
201 202
      .indicator(true)
      .loop(true)
Z
zengyawen 已提交
203 204
      .duration(1000)
      .itemSpace(0)
205
      .curve(Curve.Linear)
Z
zengyawen 已提交
206 207 208 209
      .onChange((index: number) => {
        console.info(index.toString())
      })

210 211
      Row({ space: 12 }) {
        Button('showNext')
Z
zengyawen 已提交
212 213 214
          .onClick(() => {
            this.swiperController.showNext()
          })
215
        Button('showPrevious')
Z
zengyawen 已提交
216 217 218
          .onClick(() => {
            this.swiperController.showPrevious()
          })
219 220 221
      }.margin(5)
    }.width('100%')
    .margin({ top: 5 })
Z
zengyawen 已提交
222 223 224
  }
}
```
Y
yamila 已提交
225

226
![swiper](figures/swiper.gif)