HarmonyOS 左滑到底自动删除

左滑到底自动删除(删除按钮占满屏幕,有轻微震动,然后提示已删除)

HarmonyOS
2025-01-09 14:14:32
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
aquaa

参考如下demo:

@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适用于需要一定弹性和交互性的场景,如用户可以通过一定的划动距离删除内容或移动列表项。 根据提供的demo,可以看出设置actionAreaDistance: 56,太小了,两中都会触发删除,可以设置一个稍微大一点的值。

分享
微博
QQ
微信
回复
2025-01-09 17:34:13
相关问题
【JS】如何实现删除功能?
3834浏览 • 1回复 待解决
Tabs组件TabContent滑到边缘问题
673浏览 • 0回复 待解决
HarmonyOS Tabs组件对齐
296浏览 • 1回复 待解决
HarmonyOS @ObjectLink到底怎么用
431浏览 • 1回复 待解决
HarmonyOS 页面禁止
567浏览 • 1回复 待解决
HarmonyOS Tabs如何对齐?
203浏览 • 1回复 待解决
HarmonyOS Tab如何居对齐
124浏览 • 1回复 待解决
HarmonyOS tabs不能设置对齐
224浏览 • 1回复 待解决
HarmonyOS 让tabbar居显示
244浏览 • 1回复 待解决
HarmonyOS 自定义tabbar对齐
206浏览 • 1回复 待解决
HarmonyOS tabs位置如何居显示
279浏览 • 1回复 待解决
HarmonyOS tabs的tabBar怎么居
777浏览 • 1回复 待解决