HarmonyOS 组件内转场动画,如何用条件控制是否进行转场动画

有一个组件使用了transition转场动画,但是希望可以控制,在某些情况下不使用动画直接出现/隐藏。目前测试发现如果使用了动画出现,那么一定会使用动画隐藏,无法控制不使用动画隐藏。

代码如下:

@Component
struct DemoPage {
  @State animated: boolean = true
  @State show: boolean = false
  build() {
    NavDestination() {
      Column() {
        if (this.show) {
          Column()
            .width('60%')
            .height(50)
            .backgroundColor(Color.Red)
            .transition(TransitionEffect.OPACITY.animation({ duration: this.animated ? 1000 : 0 }))
        }

        Button('show and animate')
          .margin({ top: 50 })
          .onClick(() => {
            this.animated = true
            this.show = true
          })
        Button('show and !animate')
          .margin({ top: 50 })
          .onClick(() => {
            this.animated = false
            this.show = true
          })
        Button('!show and animate')
          .margin({ top: 50 })
          .onClick(() => {
            this.animated = true
            this.show = false
          })
        Button('!show and !animate')
          .margin({ top: 50 })
          .onClick(() => {
            this.animated = false
            this.show = false
          })


      }
      .width('100%')
      .height('100%')
    }.hideTitleBar(true)
  }
}
HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
put_get

示例参考如下:

@Component
struct DemoPage {
  @State animated: boolean = true
  @State show: boolean = false
  build() {
    NavDestination() {
      Column() {
        if (this.show) {
          Column()
            .width('60%')
            .height(50)
            .backgroundColor(Color.Red)
            .transition(this.animated
              ?
            TransitionEffect.OPACITY.animation({ duration: 1000 })
              :
            TransitionEffect.OPACITY.animation({ duration: 0 }).combine(TransitionEffect.IDENTITY)
            )
        }

        Button('需要动画-显示')
          .margin({ top: 50 })
          .onClick(() => {
            this.show = true
            this.animated = true
          })

        Button('需要动画-隐藏')
          .margin({ top: 50 })
          .onClick(() => {
            this.show = false
            this.animated = true
          })

        Button('不需要动画-显示')
          .margin({ top: 50 })
          .onClick(() => {
            this.show = true
            this.animated = false
          })

        Button('不需要动画-隐藏')
          .margin({ top: 50 })
          .onClick(() => {
            this.show = false
            this.animated = false
          })

      }
      .width('100%')
      .height('100%')
    }.hideTitleBar(true)
  }
}
分享
微博
QQ
微信
回复
1天前
相关问题
如何实现动画转场效果
876浏览 • 1回复 待解决
HarmonyOS 页面内的组件转场动画
448浏览 • 1回复 待解决
如何全局设置页面转场动画
767浏览 • 1回复 待解决
HarmonyOS Navigation实现Dialog转场动画
40浏览 • 1回复 待解决
请问如何去掉ability的转场动画
11290浏览 • 2回复 待解决
Tabs 出现/消失转场动画效果
409浏览 • 1回复 待解决
HarmonyOS Refresh和页面转场动画demo
48浏览 • 1回复 待解决
HarmonyOS 无感转场动画推荐方案
126浏览 • 1回复 待解决
转场动画,谁有好的方案吗?
606浏览 • 1回复 待解决
ArkUI转场动画可以改颜色吗?
1936浏览 • 1回复 待解决
自定义弹窗自定义转场动画
1179浏览 • 1回复 待解决