滑块视图容器

2024-01-22 17:58 更新

滑块视图容器,提供子组件滑动轮播显示的能力。

说明

该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

子组件

可以包含子组件。

说明

子组件类型:系统组件和自定义组件,支持渲染控制类型(if/elseForEachLazyForEach)。

Swiper子组件的visibility属性设置为None,Swiper的displayMode属性设置为SwiperDisplayMode.AutoLinear或displayCount属性设置为'auto'时,对应子组件在视窗内不占位,但不影响导航点个数。

Swiper子组件的visibility属性设置为None,或者visibility属性设置为Hidden时,对应子组件不显示,但依然会在视窗内占位。

接口

Swiper(controller?: SwiperController)

参数:

参数名

参数类型

必填

参数描述

controller

SwiperController

给组件绑定一个控制器,用来控制组件翻页。

属性

除支持通用属性外,还支持以下属性,不支持Menu控制

名称

参数类型

描述

index

number

设置当前在容器中显示的子组件的索引值。

默认值:0

说明:

设置小于0或大于等于子组件数量时,按照默认值0处理。

autoPlay

boolean

子组件是否自动播放。

默认值:false

说明:

loop为false时,自动轮播到最后一页时停止轮播。手势切换后不是最后一页时继续播放。

interval

number

使用自动播放时播放的时间间隔,单位为毫秒。

默认值:3000

indicator

boolean

是否启用导航点指示器。

默认值:true

loop

boolean

是否开启循环。

设置为true时表示开启循环,在LazyForEach懒循环加载模式下,加载的组件数量建议大于5个。

默认值:true

duration

number

子组件切换的动画时长,单位为毫秒。

默认值:400

vertical

boolean

是否为纵向滑动。

默认值:false

itemSpace

number | string

设置子组件与子组件之间间隙。

默认值:0

说明:

不支持设置百分比。

displayMode

SwiperDisplayMode

主轴方向上元素排列的模式,优先以displayCount设置的个数显示,displayCount未设置时本属性生效。

默认值:SwiperDisplayMode.Stretch

cachedCount8+

number

设置预加载子组件个数。

默认值:1

disableSwipe8+

boolean

禁用组件滑动切换功能。

默认值:false

curve8+

Curve | string

设置Swiper的动画曲线,默认为淡入淡出曲线,常用曲线参考Curve枚举说明,也可以通过插值计算模块提供的接口创建自定义的插值曲线对象。

默认值:Curve.Linear

indicatorStyle8+

{

left?: Length,

top?: Length,

right?: Length,

bottom?: Length,

size?: Length,

mask?: boolean,

color?: ResourceColor,

selectedColor?: ResourceColor

}

设置导航点样式:

- left: 设置导航点距离Swiper组件左边的距离。

- top: 设置导航点距离Swiper组件顶部的距离。

- right: 设置导航点距离Swiper组件右边的距离。

- bottom: 设置导航点距离Swiper组件底部的距离。

- size: 设置导航点的直径。不支持设置百分比。默认值:6vp。

- mask: 设置是否显示导航点蒙层样式。

- color: 设置导航点的颜色。

- selectedColor: 设置选中的导航点的颜色。

displayCount8+

number|string

设置一页内元素显示个数。

默认值:1

说明:

字符串类型仅支持设置为'auto',显示效果同SwiperDisplayMode.AutoLinear。

使用number类型且设置小于等于0时,按默认值1显示。

使用number类型时,子组件按照主轴均分Swiper宽度(减去displayCount-1的itemSpace)的方式进行主轴拉伸(收缩)布局。

effectMode8+

EdgeEffect

滑动效果,目前支持的滑动效果参见EdgeEffect的枚举说明。

默认值:EdgeEffect.Spring

说明:

控制器接口调用时不生效回弹。

SwiperDisplayMode枚举说明

名称

描述

Stretch

Swiper滑动一页的宽度为Swiper组件自身的宽度。

AutoLinear

Swiper滑动一页的宽度为子组件宽度中的最大值。

SwiperController

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

showNext

showNext(): void

翻至下一页。翻页带动效切换过程,时长通过duration指定。

showPrevious

showPrevious(): void

翻至上一页。翻页带动效切换过程,时长通过duration指定。

finishAnimation

finishAnimation(callback?: () => void): void

停止播放动画。

参数:

参数名

参数类型

必填项

参数描述

callback

() => void

动画结束的回调。

事件

除支持通用事件外,还支持以下事件:

名称

功能描述

onChange(event: (index: number) => void)

当前显示的子组件索引变化时触发该事件,返回值为当前显示的子组件的索引值。

- index:当前显示元素的索引。

说明:

Swiper组件结合LazyForEach使用时,不能在onChange事件里触发子页面UI的刷新。

onAnimationStart9+(event: (index: number) => void)

切换动画开始时触发该回调。

- index:当前显示元素的索引。

说明:

参数为动画开始前的index值(不是最终结束动画的index值),多列Swiper时,index为最左侧组件的索引。

onAnimationEnd9+(event: (index: number) => void)

切换动画结束时触发该回调。

- index:当前显示元素的索引。

说明:

当Swiper切换动效结束时触发,包括动画过程中手势中断,通过SwiperController调用finishAnimation。参数为动画结束后的index值,多列Swiper时,index为最左侧组件的索引。

示例

  1. // xxx.ets
  2. class MyDataSource implements IDataSource {
  3. private list: number[] = []
  4. private listener: DataChangeListener
  5. constructor(list: number[]) {
  6. this.list = list
  7. }
  8. totalCount(): number {
  9. return this.list.length
  10. }
  11. getData(index: number): any {
  12. return this.list[index]
  13. }
  14. registerDataChangeListener(listener: DataChangeListener): void {
  15. this.listener = listener
  16. }
  17. unregisterDataChangeListener() {
  18. }
  19. }
  20. @Entry
  21. @Component
  22. struct SwiperExample {
  23. private swiperController: SwiperController = new SwiperController()
  24. private data: MyDataSource = new MyDataSource([])
  25. aboutToAppear(): void {
  26. let list = []
  27. for (var i = 1; i <= 10; i++) {
  28. list.push(i.toString());
  29. }
  30. this.data = new MyDataSource(list)
  31. }
  32. build() {
  33. Column({ space: 5 }) {
  34. Swiper(this.swiperController) {
  35. LazyForEach(this.data, (item: string) => {
  36. Text(item).width('90%').height(160).backgroundColor(0xAFEEEE).textAlign(TextAlign.Center).fontSize(30)
  37. }, item => item)
  38. }
  39. .cachedCount(2)
  40. .index(1)
  41. .autoPlay(true)
  42. .interval(4000)
  43. .indicator(true)
  44. .loop(true)
  45. .duration(1000)
  46. .itemSpace(0)
  47. .curve(Curve.Linear)
  48. .onChange((index: number) => {
  49. console.info(index.toString())
  50. })
  51. Row({ space: 12 }) {
  52. Button('showNext')
  53. .onClick(() => {
  54. this.swiperController.showNext()
  55. })
  56. Button('showPrevious')
  57. .onClick(() => {
  58. this.swiperController.showPrevious()
  59. })
  60. }.margin(5)
  61. }.width('100%')
  62. .margin({ top: 5 })
  63. }
  64. }

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号