#鸿蒙通关秘籍#如何在HarmonyOS中实现多模态页面转场动效?

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
SOAP梦幻光

在HarmonyOS中实现多模态页面转场效果,可以通过结合半模态转场和全屏模态转场来实现。具体步骤如下:

  1. 使用NavDestinationMode配置为DIALOG类型实现半模态,并设置背景透明。

    import { RouterInfo } from '@ohos.dynamicsRouter/Index';
    pageMap(name: string, param: ESObject) {
      NavDestination() {}
      .mode(name === RouterInfo.MULTI_MODAL_TRANSITION.moduleName + "/" + RouterInfo.MULTI_MODAL_TRANSITION.pageName ?
      NavDestinationMode.DIALOG : NavDestinationMode.STANDARD)
    }
    
  2. 通过bindSheet属性将半模态页面绑定到主页的按钮控件,实现页面转场操作。

    Text()
      .bindSheet($$this.isPresent, this.halfModalLogin(), {
        height: this.sheetHeight,
        dragBar: this.showDragBar, 
        backgroundColor: $r('app.color.btn_bgc'),
        showClose: true,
        shouldDismiss: ((sheetDismiss: SheetDismiss) => {
          sheetDismiss.dismiss();
          this.pageStack.pop();
        })
    })
    
  3. 在半模态页面的按钮控件中绑定全屏模态转场,通过ModalTransition.NONE将转场特效设置为空。

    @Builder
    halfModalLogin() {
      Button("验证码登录")
        .bindContentCover(this.isPresentInLoginView, this.defaultLogin(), { modalTransition: ModalTransition.NONE })
        .onClick(() => {
          if (this.isConfirmed) {
            this.isPresentInLoginView = true;
          }
        })
    }
    
  4. 使用isDefaultLogin状态控制验证码登录和账户密码登录两种组件的条件渲染,并通过TransitionEffect.move()方法实现组件间的转场效果。

    build() {
      Stack({ alignContent: Alignment.TopStart }) {
        if (this.isDefaultLogin) {
          CaptchaLogin()
            .transition(TransitionEffect.move(TransitionEdge.START).animation({ duration: EffectDuration, curve: Curve.Linear }))
        } else {
          AccountLogin()
            .transition(TransitionEffect.move(TransitionEdge.END).animation({ duration: EffectDuration, curve: Curve.Linear }))
        }
      }
    }
    

这样,通过结合使用半模态和全屏模态的配置,便可以实现多模态页面转场的效果。

分享
微博
QQ
微信
回复
2天前
相关问题