# å…¨å±æ¨¡æ€è½¬åœº 通过bindContentCover属性为组件绑定全å±æ¨¡æ€é¡µé¢ï¼Œåœ¨ç»„件æ’å…¥å’Œåˆ é™¤æ—¶å¯é€šè¿‡è®¾ç½®è½¬åœºå‚æ•°ModalTransition显示过渡动效。 > **说明:** > > 从API Version 10开始支æŒã€‚åŽç»ç‰ˆæœ¬å¦‚æœ‰æ–°å¢žå†…å®¹ï¼Œåˆ™é‡‡ç”¨ä¸Šè§’æ ‡å•ç‹¬æ ‡è®°è¯¥å†…容的起始版本。 > > ä¸æ”¯æŒæ¨ªç«–å±åˆ‡æ¢ã€‚ > > ä¸æ”¯æŒè·¯ç”±è·³è½¬ã€‚ ## bindContentCover bindContentCover(isShow: Optional\<boolean\>, builder: CustomBuilder, options?: ContentCoverOptions) 给组件绑定全å±æ¨¡æ€é¡µé¢ï¼Œç‚¹å‡»åŽæ˜¾ç¤ºæ¨¡æ€é¡µé¢ã€‚模æ€é¡µé¢å†…容自定义,显示方å¼å¯è®¾ç½®æ— 动画过渡,上下切æ¢è¿‡æ¸¡ä»¥åŠé€æ˜Žæ¸å˜è¿‡æ¸¡æ–¹å¼ã€‚ **原å化æœåŠ¡API:** 从API version 11开始,该接å£æ”¯æŒåœ¨åŽŸå化æœåŠ¡ä¸ä½¿ç”¨ã€‚ **系统能力:** SystemCapability.ArkUI.ArkUI.Full **å‚数:** | å‚æ•°å | 类型 | å¿…å¡« | 说明 | | ------- | ------------------------------------------- | ---- | ------------------------------------------------------------ | | isShow | Optional\<boolean\> | 是 | 是å¦æ˜¾ç¤ºå…¨å±æ¨¡æ€é¡µé¢ã€‚<br/>从API version 10开始,该å‚数支æŒ[$$](../../../quick-start/arkts-two-way-sync.md)åŒå‘绑定å˜é‡ã€‚| | builder | [CustomBuilder](ts-types.md#custombuilder8) | 是 | é…置全å±æ¨¡æ€é¡µé¢å†…容。 | | options | [ContentCoverOptions](#contentcoveroptions) | å¦ | é…置全å±æ¨¡æ€é¡µé¢çš„å¯é€‰å±žæ€§ã€‚ | ## ContentCoverOptions 继承自[BindOptions](ts-universal-attributes-sheet-transition.md#bindoptions)。 | å称 | 类型 | å¿…å¡« | æè¿° | | --------------- | ---------------------------------------- | ---- | ------------- | | modalTransition | [ModalTransition](ts-types.md#modaltransition10) | å¦ | å…¨å±æ¨¡æ€é¡µé¢çš„转场方å¼ã€‚<br />**原å化æœåŠ¡API:** 从API version 11开始,该接å£æ”¯æŒåœ¨åŽŸå化æœåŠ¡ä¸ä½¿ç”¨ã€‚ | | onWillDismiss<sup>12+</sup> | Callback<[DismissContentCoverAction](#dismisscontentcoveraction12类型说明)> | å¦ | å…¨å±æ¨¡æ€é¡µé¢äº¤äº’å¼å…³é—回调函数。<br/>**说明:**<br />当用户执行back事件关é—交互æ“作时,如果注册该回调函数,则ä¸ä¼šç«‹åˆ»å…³é—。在回调函数ä¸å¯ä»¥é€šè¿‡reason得到阻拦关é—页é¢çš„æ“ä½œç±»åž‹ï¼Œä»Žè€Œæ ¹æ®åŽŸå› 选择是å¦å…³é—å…¨å±æ¨¡æ€é¡µé¢ã€‚在onWillDismiss回调ä¸ï¼Œä¸èƒ½å†åšonWillDismiss拦截。 <br/>**原å化æœåŠ¡API:** 从API version 12开始,该接å£æ”¯æŒåœ¨åŽŸå化æœåŠ¡ä¸ä½¿ç”¨ã€‚| | transition<sup>12+</sup> | [TransitionEffect](ts-transition-animation-component.md#transitioneffect10对象说明) | å¦ | å…¨å±æ¨¡æ€é¡µé¢çš„转场方å¼ã€‚ <br/>**原å化æœåŠ¡API:** 从API version 12开始,该接å£æ”¯æŒåœ¨åŽŸå化æœåŠ¡ä¸ä½¿ç”¨ã€‚| ## DismissContentCoverAction<sup>12+</sup>类型说明 **原å化æœåŠ¡API:** 从API version 12开始,该接å£æ”¯æŒåœ¨åŽŸå化æœåŠ¡ä¸ä½¿ç”¨ã€‚ | å称 | 类型 | å¿…å¡« | æè¿° | | --------------- | ---------------------------------------- | ---- | ------------- | | dismiss | function | 是 | å…¨å±æ¨¡æ€é¡µé¢å…³é—回调函数。开å‘者需è¦é€€å‡ºé¡µé¢æ—¶è°ƒç”¨ã€‚ | | reason | [DismissReason](ts-universal-attributes-popup.md#dismissreason12枚举说明) | 是 | 返回本次拦截全å±æ¨¡æ€é¡µé¢é€€å‡ºçš„äº‹ä»¶åŽŸå› ã€‚ | ## 示例 ### 示例1(使用全å±æ¨¡æ€è½¬åœºï¼‰ 该示例主è¦æ¼”示通过bindContentCoveræ¥å®žçŽ°å…¨å±æ¨¡æ€è½¬åœºã€‚ ```ts // xxx.ets @Entry @Component struct ModalTransitionExample { @State isShow: boolean = false @State isShow2: boolean = false @Builder myBuilder2() { Column() { Button("close modal 2") .margin(10) .fontSize(20) .onClick(() => { this.isShow2 = false; }) } .width('100%') .height('100%') } @Builder myBuilder() { Column() { Button("transition modal 2") .margin(10) .fontSize(20) .onClick(() => { this.isShow2 = true; }).bindContentCover(this.isShow2, this.myBuilder2(), { modalTransition: ModalTransition.NONE, backgroundColor: Color.Orange, onWillAppear: () => { console.log("BindContentCover onWillAppear.") }, onAppear: () => { console.log("BindContentCover onAppear.") }, onWillDisappear: () => { console.log("BindContentCover onWillDisappear.") }, onDisappear: () => { console.log("BindContentCover onDisappear.") } }) Button("close modal 1") .margin(10) .fontSize(20) .onClick(() => { this.isShow = false; }) } .width('100%') .height('100%') .justifyContent(FlexAlign.Center) } build() { Column() { Button("transition modal 1") .onClick(() => { this.isShow = true }) .fontSize(20) .margin(10) .bindContentCover(this.isShow, this.myBuilder(), { modalTransition: ModalTransition.NONE, backgroundColor: Color.Pink, onWillAppear: () => { console.log("BindContentCover onWillAppear.") }, onAppear: () => { console.log("BindContentCover onAppear.") }, onWillDisappear: () => { console.log("BindContentCover onWillDisappear.") }, onDisappear: () => { console.log("BindContentCover onDisappear.") } }) } .justifyContent(FlexAlign.Center) .backgroundColor("#ff49c8ab") .width('100%') .height('100%') } } ```  ### 示例2(自定义转场动画) å…¨å±æ¨¡æ€æ— 动画转场模å¼ä¸‹ï¼Œè‡ªå®šä¹‰è½¬åœºåŠ¨ç”»ã€‚ ```ts // xxx.ets import { curves } from '@kit.ArkUI'; @Entry @Component struct ModalTransitionExample { @State @Watch("isShow1Change") isShow: boolean = false @State @Watch("isShow2Change") isShow2: boolean = false @State isScale1: number = 1; @State isScale2: number = 1; isShow1Change() { this.isShow ? this.isScale1 = 0.95 : this.isScale1 = 1 } isShow2Change() { this.isShow2 ? this.isScale2 = 0.95 : this.isScale2 = 1 } @Builder myBuilder2() { Column() { Button("close modal 2") .margin(10) .fontSize(20) .onClick(() => { this.isShow2 = false; }) } .width('100%') .height('100%') } @Builder myBuilder() { Column() { Button("transition modal 2") .margin(10) .fontSize(20) .onClick(() => { this.isShow2 = true; }).bindContentCover(this.isShow2, this.myBuilder2(), { modalTransition: ModalTransition.NONE, backgroundColor: Color.Orange, onWillAppear: () => { console.log("BindContentCover onWillAppear.") }, onAppear: () => { console.log("BindContentCover onAppear.") }, onWillDisappear: () => { console.log("BindContentCover onWillDisappear.") }, onDisappear: () => { console.log("BindContentCover onDisappear.") } }) Button("close modal 1") .margin(10) .fontSize(20) .onClick(() => { this.isShow = false; }) } .width('100%') .height('100%') .justifyContent(FlexAlign.Center) .scale({ x: this.isScale2, y: this.isScale2 }) .animation({ curve: curves.springMotion() }) } build() { Column() { Button("transition modal 1") .onClick(() => { this.isShow = true }) .fontSize(20) .margin(10) .bindContentCover(this.isShow, this.myBuilder(), { modalTransition: ModalTransition.NONE, backgroundColor: Color.Pink, onWillAppear: () => { console.log("BindContentCover onWillAppear.") }, onAppear: () => { console.log("BindContentCover onAppear.") }, onWillDisappear: () => { console.log("BindContentCover onWillDisappear.") }, onDisappear: () => { console.log("BindContentCover onDisappear.") } }) } .justifyContent(FlexAlign.Center) .backgroundColor("#ff49c8ab") .width('100%') .height('100%') .scale({ x: this.isScale1, y: this.isScale1 }) .animation({ curve: curves.springMotion() }) } } ```  ### 示例3(上下切æ¢è½¬åœºï¼‰ å…¨å±æ¨¡æ€ä¸Šä¸‹åˆ‡æ¢è½¬åœºã€‚ ```ts // xxx.ets @Entry @Component struct ModalTransitionExample { @State isShow: boolean = false @State isShow2: boolean = false @Builder myBuilder2() { Column() { Button("close modal 2") .margin(10) .fontSize(20) .onClick(() => { this.isShow2 = false; }) } .width('100%') .height('100%') } @Builder myBuilder() { Column() { Button("transition modal 2") .margin(10) .fontSize(20) .onClick(() => { this.isShow2 = true; }).bindContentCover(this.isShow2, this.myBuilder2(), { modalTransition: ModalTransition.DEFAULT, backgroundColor: Color.Gray, onWillAppear: () => { console.log("BindContentCover onWillAppear.") }, onAppear: () => { console.log("BindContentCover onAppear.") }, onWillDisappear: () => { console.log("BindContentCover onWillDisappear.") }, onDisappear: () => { console.log("BindContentCover onDisappear.") } }) Button("close modal 1") .margin(10) .fontSize(20) .onClick(() => { this.isShow = false; }) } .width('100%') .height('100%') .justifyContent(FlexAlign.Center) } build() { Column() { Button("transition modal 1") .onClick(() => { this.isShow = true }) .fontSize(20) .margin(10) .bindContentCover(this.isShow, this.myBuilder(), { modalTransition: ModalTransition.DEFAULT, backgroundColor: Color.Pink, onWillAppear: () => { console.log("BindContentCover onWillAppear.") }, onAppear: () => { console.log("BindContentCover onAppear.") }, onWillDisappear: () => { console.log("BindContentCover onWillDisappear.") }, onDisappear: () => { console.log("BindContentCover onDisappear.") } }) } .justifyContent(FlexAlign.Center) .backgroundColor(Color.White) .width('100%') .height('100%') } } ```  ### 示例4(é€æ˜Žåº¦æ¸å˜è½¬åœºï¼‰ å…¨å±æ¨¡æ€é€æ˜Žåº¦æ¸å˜è½¬åœºã€‚ ```ts // xxx.ets @Entry @Component struct ModalTransitionExample { @State isShow: boolean = false @State isShow2: boolean = false @Builder myBuilder2() { Column() { Button("close modal 2") .margin(10) .fontSize(20) .onClick(() => { this.isShow2 = false; }) } .width('100%') .height('100%') .justifyContent(FlexAlign.Center) } @Builder myBuilder() { Column() { Button("transition modal 2") .margin(10) .fontSize(20) .onClick(() => { this.isShow2 = true; }).bindContentCover(this.isShow2, this.myBuilder2(), { modalTransition: ModalTransition.ALPHA, backgroundColor: Color.Gray, onWillAppear: () => { console.log("BindContentCover onWillAppear.") }, onAppear: () => { console.log("BindContentCover onAppear.") }, onWillDisappear: () => { console.log("BindContentCover onWillDisappear.") }, onDisappear: () => { console.log("BindContentCover onDisappear.") } }) Button("close modal 1") .margin(10) .fontSize(20) .onClick(() => { this.isShow = false; }) } .width('100%') .height('100%') .justifyContent(FlexAlign.Center) } build() { Column() { Button("transition modal 1") .onClick(() => { this.isShow = true }) .fontSize(20) .margin(10) .bindContentCover(this.isShow, this.myBuilder(), { modalTransition: ModalTransition.ALPHA, backgroundColor: Color.Pink, onWillAppear: () => { console.log("BindContentCover onWillAppear.") }, onAppear: () => { console.log("BindContentCover onAppear.") }, onWillDisappear: () => { console.log("BindContentCover onWillDisappear.") }, onDisappear: () => { console.log("BindContentCover onDisappear.") } }) } .justifyContent(FlexAlign.Center) .backgroundColor(Color.White) .width('100%') .height('100%') } } ```  ### 示例5(设置ä¸åŒæ•ˆæžœçš„自定义转场) 该示例主è¦æ¼”示全å±æ¨¡æ€æ—‹è½¬ï¼Œå¹³ç§»ç‰è‡ªå®šä¹‰è½¬åœºã€‚ ```ts // xxx.ets @Entry @Component struct ModalTransitionExample { @State isShow: boolean = false @State isShow2: boolean = false @Builder myBuilder2() { Column() { Button("Close Modal 2") .margin(10) .fontSize(20) .onClick(() => { this.isShow2 = false; }) } .width('100%') .height('100%') .justifyContent(FlexAlign.Center) } @Builder myBuilder() { Column() { Button("Transition Modal 2") .margin(10) .fontSize(20) .onClick(() => { this.isShow2 = true; }) .bindContentCover( this.isShow2, this.myBuilder2(), { modalTransition: ModalTransition.DEFAULT, backgroundColor: Color.Gray, transition: TransitionEffect.SLIDE.animation({ duration: 5000, curve: Curve.LinearOutSlowIn }), onWillDismiss: ((dismissContentCoverAction: DismissContentCoverAction) => { if (dismissContentCoverAction.reason == DismissReason.PRESS_BACK) { console.log("BindContentCover dismiss reason is back pressed") } dismissContentCoverAction.dismiss() }), onAppear: () => { console.info("BindContentCover onAppear.") }, onDisappear: () => { this.isShow2 = false; console.info("BindContentCover onDisappear.") } }) Button("Close Modal 1") .margin(10) .fontSize(20) .onClick(() => { this.isShow = false; }) } .width('100%') .height('100%') .justifyContent(FlexAlign.Center) } build() { Column() { Button("Transition Modal 1") .onClick(() => { this.isShow = true }) .fontSize(20) .margin(10) .bindContentCover( this.isShow, this.myBuilder(), { modalTransition: ModalTransition.DEFAULT, backgroundColor: Color.Pink, transition: TransitionEffect.asymmetric( TransitionEffect.OPACITY.animation({ duration: 1100 }).combine( TransitionEffect.rotate({ z: 1, angle: 180 }).animation({ delay: 1000, duration: 1000 })) , TransitionEffect.OPACITY.animation({ duration: 1200 }).combine( TransitionEffect.rotate({ z: 1, angle: 180 }).animation({ duration: 1300 })) ), onWillDismiss: ((dismissContentCoverAction: DismissContentCoverAction) => { if (dismissContentCoverAction.reason == DismissReason.PRESS_BACK) { console.log("back pressed"); } dismissContentCoverAction.dismiss() }), onAppear: () => { console.log("BindContentCover onAppear.") }, onDisappear: () => { this.isShow = false; console.log("BindContentCover onDisappear.") } }) } .justifyContent(FlexAlign.Center) .backgroundColor(Color.White) .width('100%') .height('100%') } } ``` 