@Entry @Component struct ListItemExample2 { @State arr: number[] = [0, 1, 2, 3, 4] @State enterEndDeleteAreaString: string = "not enterEndDeleteArea" @State exitEndDeleteAreaString: string = "not exitEndDeleteArea" @State isShow: boolean = true; @Builder itemEnd() { Row() { Button("Delete").margin("4vp") Button("Set").margin("4vp") }.padding("4vp").justifyContent(FlexAlign.SpaceEvenly) } build() { Column() { Button("点击").onClick(() => { this.isShow = !this.isShow console.log(this.isShow + "111111111") }) List({ space: 10 }) { ForEach(this.arr, (item: number) => { ListItem() { Text("item" + item) .width('100%') .height(100) .fontSize(16) .textAlign(TextAlign.Center) .borderRadius(10) .backgroundColor(0xFFFFFF) }.transition({ type: TransitionType.Delete, opacity: 0 }).swipeAction({ end: this.isShow ? { builder: () => { this.itemEnd() }, onAction: () => { animateTo({ duration: 1000 }, () => { let index = this.arr.indexOf(item) this.arr.splice(index, 1) }) }, actionAreaDistance: 56, onEnterActionArea: () => { this.enterEndDeleteAreaString = "enterEndDeleteArea" this.exitEndDeleteAreaString = "not exitEndDeleteArea" }, onExitActionArea: () => { this.enterEndDeleteAreaString = "not enterEndDeleteArea" this.exitEndDeleteAreaString = "exitEndDeleteArea" } } : undefined, edgeEffect: SwipeEdgeEffect.None }) }, (item: string) => item) } Text(this.enterEndDeleteAreaString).fontSize(20) Text(this.exitEndDeleteAreaString).fontSize(20) }.padding(10).backgroundColor(0xDCDCDC).width('100%').height('100%') } }
1、SwipeEdgeEffect.None:当设置为SwipeEdgeEffect.None时,Listitem划动距离不能超过划出组件大小。如果设置了删除区域,ListItem划动距离不能超过删除阈值,并且在设置删除回调的情况下,达到删除阈值后松手触发删除回调。 适用场景:适用于需要严格限制Listitem划动距离的场景,如避免用户意外滑动到不希望的区域。
2、SwipeEdgeEffect.Spring:当设置为SwipeEdgeEffect.Spring时,Listitem划动距离超过划出组件大小后可以继续划动。如果设置了删除区域,ListItem划动距离超过删除阈值后可以继续划动,松手后按照弹簧阻尼曲线回弹。 适用场景:适用于需要一定弹性和交互性的场景,如用户可以通过一定的划动距离删除内容或移动列表项。 主要区别如下 划动限制:SwipeEdgeEffect.None限制划动距离,而SwipeEdgeEffect.Spring没有此限制,可以继续划动。 删除阈值:SwipeEdgeEffect.None需要设置删除区域,当划动距离超过删除阈值后触发删除回调,而SwipeEdgeEffect.Spring可以自动根据划动距离触发删除回调。 使用场景:SwipeEdgeEffect.None适用于需要严格限制划动距离的场景,如避免用户意外滑动到不希望的区域。SwipeEdgeEffect.Spring适用于需要一定弹性和交互性的场景,如用户可以通过一定的划动距离删除内容或移动列表项