OpenHarmony开发者论坛
标题:
OpenHarmony组件介绍-Swiper
[打印本页]
作者:
深开鸿_王石
时间:
2024-1-2 14:41
标题:
OpenHarmony组件介绍-Swiper
[md]### 背景
当我们浏览网站,相册,购物应用时,会发现有些图片会不断变化的,如图:
![image.png](
https://forums-obs.openharmony.c ... ofb1rp12c3m73m9.png
"image.png")
这个对应OpenHarmony应用开发就需要我们用到Swiper组件,本篇我们就此组件进行介绍。
### Swiper组件介绍
1,滑块视图容器,提供子组件滑动轮播显示的能力。
```shell
该组件从API Version 7开始支持。官方doc地址:
http://test.openharmony.cn:7780/ ... ontainer-swiper.md/
```
### 简单解读
* 接口
```typescript
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为最左侧组件的索引。 |
### 代码示例
```typescript
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 })
}
}
```
此用例可以自动滑动图片,进行滚动播放,当然也可以结合之前介绍的waterflow,容器叠加实现更高级的功能
[/md]
欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/)
Powered by Discuz! X3.5