#星计划# HarmonyOS组件介绍-Swiper 原创

左翼风发
发布于 2023-12-28 22:22
浏览
0收藏

背景

当我们浏览网站,相册,购物应用时,会发现有些图片会不断变化的,如图:
#星计划# HarmonyOS组件介绍-Swiper-鸿蒙开发者社区

这个对应HarmonyOS应用开发就需要我们用到Swiper组件,本篇我们就此组件进行介绍。

Swiper组件介绍

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

该组件从API Version 7开始支持。官方doc地址:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V2/ts-container-swiper-0000001427744844-V2

简单解读

  • 接口

    Swiper(controller?: SwiperController)
    
  • 参数

参数名 参数类型 必填项 参数描述
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调用finishAnimatio。参数为动画结束后的index值,多列Swiper时,index为最左侧组件的索引。

代码示例

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() {
  }
}

@Entry
@Component
struct SwiperExample {
  private swiperController: SwiperController = new SwiperController()
  private data: MyDataSource = new MyDataSource([])
  private colist: string[] = [
    "#5C2223",    "#EEA2A4",    "#5A191B",    "#E07C82",    "#5A1216",    "#ED5A65",
    "#C04851",    "#EE3E4D",    "#C02C38",    "#A7535A",    "#E3B4B8",    "#EOA1A8",
  ]


  aboutToAppear(): void {
    let list = []
    for (var i = 1; i <= 10; i++) {
      list.push(i.toString());
    }
    this.data = new MyDataSource(list)
  }

  build() {
    Column({ space: 5 }) {
      Swiper(this.swiperController) {
        LazyForEach(this.data, (item: string) => {
          Text(item).width('90%').height(160).backgroundColor(this.colist[Number(item)]).textAlign(TextAlign.Center).fontSize(30)
        }, item => item)
      }
      .cachedCount(2)
      .index(1)
      .autoPlay(true)
      .interval(4000)
      .indicator(true)
      .loop(true)
      .duration(1000)
      .itemSpace(0)
      .curve(Curve.Linear)
      .onChange((index: number) => {
        console.info(index.toString())
      })
      
    }.width('100%')
    .margin({ top: 5 })
  }
}

#星计划# HarmonyOS组件介绍-Swiper-鸿蒙开发者社区
此用例可以自动滑动图片,进行滚动播放,当然也可以结合之前介绍的waterflow,容器叠加实现更高级的功能

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
swiper.rar 264.54K 10次下载
收藏
回复
举报
回复
    相关推荐