Swiper:滑动容器,提供切换子组件显示的能力
Swiper(value:{controller?: SwiperController})
controller:给组件绑定一个控制器,用来控制组件翻页
属性:
index:设置当前在容器中显示的子组件的索引值,默认0
autoPlay:子组件是否自动播放,自动播放状态下,导航点不可操作,默认false
interval:使用自动播放时播放的时间间隔,单位为毫秒,默认3000
indicator:是否启用导航点指示器,默认true
loop:是否开启循环,默认true
duration:子组件切换的动画时长,单位为毫秒,默认400
vertical:是否为纵向滑动,默认false
itemSpace:设置子组件与子组件之间间隙,默认0
cachedCount(API8):设置预加载子组件个数,默认1
disableSwipe(API8):禁用组件滑动切换功能。
curve(API8):设置Swiper的动画曲线,默认为淡入淡出曲线,常用曲线参考Curve枚举说明,也可以通过插值计算模块提供的接口创建自定义的Curves(插值曲线对象),默认Curve.Ease
indicatorStyle(API8):设置indicator样式
{
left?: Length,//设置导航点距离Swiper组件左边的距离
top?: Length,//设置导航点距离Swiper组件顶部的距离
right?: Length,//设置导航点距离Swiper组件右边的距离
bottom?: Length,//设置导航点距离Swiper组件底部的距离
size?: Length,//设置导航点的直径
color?: Color,//设置导航点的颜色
selectedColor?: Color//设置选中的导航点的颜色
}
SwiperController:Swiper容器组件的控制器,可以将此对象绑定至Swiper组件,然后通过它控制翻页
showNext():void 翻至下一页。
showPrevious():void 翻至上一页。
事件:
onChange( index: number) => void 当前显示的组件索引变化时触发该事件
案例效果:
代码:
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) {
return this.list[index]
}
registerDataChangeListener(listener: DataChangeListener) {
this.listener = listener
}
unregisterDataChangeListener() {
}
}
@Entry
@Component
struct SwiperPageT {
private swiperController: SwiperController = new SwiperController()
private data: MyDataSource = new MyDataSource([])
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(0xAFEEEE)
.textAlign(TextAlign.Center)
}, item => item)
}
.cachedCount(2) //设置预加载个数
.index(1) //设置当前显示的组件索引
.autoPlay(true) //自动播放
.interval(4000) //自动播放时间间隔
.indicator(true) //默认开启指示点
.loop(false) //循环播放
.duration(1000) //切换动画时长
.vertical(false) //横向切换
.itemSpace(0) //组件之间的间隙
.curve(Curve.Linear) //动画曲线
.onChange((index: number) => {
console.info(index.toString())
})
Flex({ justifyContent: FlexAlign.SpaceAround }) {
Button('next').onClick(() => {
this.swiperController.showNext()
})
Button('preview').onClick(() => {
this.swiperController.showPrevious()
})
}
}
.width('100%')
.height('100%')
}
}