尝试下如下demo:@CustomDialog struct CustomDialogExample { controller: CustomDialogController = new CustomDialogController({ builder: CustomDialogExample({}), autoCancel: false }) @State showFlag: Visibility = Visibility.Visible; @State isAutoCancel: boolean = false; anmDuration: number = 300 textController: TextAreaController = new TextAreaController() build() { Column() { Row() { Text("自定义动画的弹窗") }.borderRadius(20).backgroundColor('#ff6288cb').height(200).width('100%') } .margin({ top: 10 }) .justifyContent(FlexAlign.Center) .onClick(() => { console.log("dialogClick") if (this.isAutoCancel) { console.log("dialogClick2") this.cancel(); } }) .visibility(this.showFlag) // 定义进场出场转场动画效果 .transition(TransitionEffect.OPACITY.animation({ duration: this.anmDuration }) .combine(TransitionEffect.translate({ y: 300 }))) } // 延迟关闭弹窗,让自定义的出场动画显示 cancel() { this.showFlag = Visibility.Hidden console.log("closeDialog") setTimeout(() => { this.controller.close() }, this.anmDuration) } } @Entry @Component struct CustomDialogPage { @State isAutoCancel: boolean = true; dialogController: CustomDialogController = new CustomDialogController({ builder: CustomDialogExample({ isAutoCancel: this.isAutoCancel }), autoCancel: false, customStyle: true, alignment: DialogAlignment.Bottom }) build() { Column() { Button('click me').onClick(() => { this.dialogController.open() }) }.width('100%').height('100%') } }
尝试下如下demo: