diff --git a/zh-cn/application-dev/reference/arkui-ts/Readme-CN.md b/zh-cn/application-dev/reference/arkui-ts/Readme-CN.md index a56399c8070258cbb48bb2829852dea22d105c15..7e9b4a568d5b0b16fb7f757802133a2f710dfa73 100644 --- a/zh-cn/application-dev/reference/arkui-ts/Readme-CN.md +++ b/zh-cn/application-dev/reference/arkui-ts/Readme-CN.md @@ -46,6 +46,9 @@ - [图像球面效果设置](ts-universal-attributes-sphericalEffect.md) - [图像渐亮效果设置](ts-universal-attributes-lightUpEffect.md) - [图像像素扩展效果设置](ts-universal-attributes-pixelStretchEffect.md) + - 模态转场设置 + - [全屏模态转场](ts-universal-attributes-modal-transition.md) + - [半模态转场](ts-universal-attributes-sheet-transition.md) - [文本通用属性](ts-universal-attributes-text-style.md) - 手势处理 - [绑定手势方法](ts-gesture-settings.md) diff --git a/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_full_screen_modal_alpha.gif b/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_full_screen_modal_alpha.gif new file mode 100644 index 0000000000000000000000000000000000000000..54c74793ba762946b561e869b3352db7a116b3ce Binary files /dev/null and b/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_full_screen_modal_alpha.gif differ diff --git a/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_full_screen_modal_default.gif b/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_full_screen_modal_default.gif new file mode 100644 index 0000000000000000000000000000000000000000..a2790b3cf613f7c525ba5b57d3c7b88ed41b1505 Binary files /dev/null and b/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_full_screen_modal_default.gif differ diff --git a/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_full_screen_modal_none_1.gif b/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_full_screen_modal_none_1.gif new file mode 100644 index 0000000000000000000000000000000000000000..88bc23b3df7443202ac67719d08f33e8b1006a42 Binary files /dev/null and b/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_full_screen_modal_none_1.gif differ diff --git a/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_full_screen_modal_none_2.gif b/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_full_screen_modal_none_2.gif new file mode 100644 index 0000000000000000000000000000000000000000..0a38281620329cb6a1c2f39ad9babe628950a41a Binary files /dev/null and b/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_full_screen_modal_none_2.gif differ diff --git a/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_sheet.gif b/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_sheet.gif new file mode 100644 index 0000000000000000000000000000000000000000..192e22e3d28c4d56350c070fae5375d358a9abb7 Binary files /dev/null and b/zh-cn/application-dev/reference/arkui-ts/figures/zh-cn_sheet.gif differ diff --git a/zh-cn/application-dev/reference/arkui-ts/ts-types.md b/zh-cn/application-dev/reference/arkui-ts/ts-types.md index 83ce3e4525e04de353e3e68156b92d12d1a53114..d87732370e2f9d0d7afb941faaca1562dc3be1d5 100644 --- a/zh-cn/application-dev/reference/arkui-ts/ts-types.md +++ b/zh-cn/application-dev/reference/arkui-ts/ts-types.md @@ -233,4 +233,14 @@ | left | [Length](#length) | 否 | 组件图像左边沿扩展距离。 | | right | [Length](#length) | 否 | 组件图像右边沿像素扩展距离。 | | top | [Length](#length) | 否 | 组件图像上边沿像素扩展距离。 | -| bottom | [Length](#length) | 否 | 组件图像下边沿像素扩展距离。 | \ No newline at end of file +| bottom | [Length](#length) | 否 | 组件图像下边沿像素扩展距离。 | + +## ModalTransition10+ + +全屏模态转场方式枚举类型,用于设置全屏模态转场类型。 + +| 名称 | 描述 | +| --------- | ------- | +| None | 全屏模态无转场动画。 | +| Default | 全屏模态上下切换动画。 | +| Alpha | 全屏模态透明度渐变动画。 | \ No newline at end of file diff --git a/zh-cn/application-dev/reference/arkui-ts/ts-universal-attributes-modal-transition.md b/zh-cn/application-dev/reference/arkui-ts/ts-universal-attributes-modal-transition.md new file mode 100644 index 0000000000000000000000000000000000000000..83c42ef1cc275fa966145179d33fa048a7e21a42 --- /dev/null +++ b/zh-cn/application-dev/reference/arkui-ts/ts-universal-attributes-modal-transition.md @@ -0,0 +1,305 @@ +# 全屏模态转场设置 + +通过bindContentCover属性为组件绑定全屏模态页面,在组件插入和删除时可通过设置转场参数ModalTransition显示过渡动效。 + +> **说明:** +> +> 从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 属性 + +| 名称 | 参数 | 参数描述 | +| -------- | -------- | -------- | +| bindContentCover | isShow: boolean,
builder: [CustomBuilder](ts-types.md#custombuilder8),
type?: [ModalTransition](ts-types.md#modaltransition10) | 给组件绑定全屏模态页面,点击后显示模态页面。模态页面内容自定义,显示方式可设置无动画过渡,上下切换过渡以及透明渐变过渡方式。
isShow: 必填,是否显示全屏模态页面。
builder: 必填,配置全屏模态页面内容。
type: 非必填,配置全屏模态页面的转场方式。 | + +## 示例 + +### 示例1 + +全屏模态无动画转场模式下,自定义转场动画。 + +```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%') + .backgroundColor(Color.Orange) + } + + @Builder myBuilder() { + Column() { + Button("transition modal 2") + .margin(10) + .fontSize(20) + .onClick(()=>{ + this.isShow2 = true; + }).bindContentCover($$this.isShow2, this.myBuilder2(), ModalTransition.NONE) + + Button("close modal 1") + .margin(10) + .fontSize(20) + .onClick(()=>{ + this.isShow = false; + }) + } + .width('100%') + .height('100%') + .backgroundColor(Color.Pink) + .justifyContent(FlexAlign.Center) + } + + build() { + Column() { + Button("transition modal 1") + .onClick(() => { + this.isShow = true + }) + .fontSize(20) + .margin(10) + .bindContentCover($$this.isShow, this.myBuilder(), ModalTransition.NONE) + } + .justifyContent(FlexAlign.Center) + .backgroundColor("#ff49c8ab") + .width('100%') + .height('100%') + } +} +``` + +![zh-cn_full_screen_modal_none_1](figures/zh-cn_full_screen_modal_none_1.gif) + +### 示例2 + +全屏模态无动画转场模式下,自定义转场动画。 + +```ts +// xxx.ets +import curves from '@ohos.curves'; +@Entry +@Component +struct ModalTransitionExample { + @State @Watch("isShow1Change") isShow:boolean = false + @State @Watch("isShow2Change") isShow2:boolean = false + @State isScale1:number = 1; + @State isScale2:number = 1; + @State flag: boolean = true + @State show: string = 'show' + + 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%') + .backgroundColor(Color.Orange) + } + + + @Builder myBuilder() { + Column() { + Button("transition modal 2") + .margin(10) + .fontSize(20) + .onClick(()=>{ + this.isShow2 = true; + }).bindContentCover($$this.isShow2, this.myBuilder2(), ModalTransition.NONE) + + Button("close modal 1") + .margin(10) + .fontSize(20) + .onClick(()=>{ + this.isShow = false; + }) + } + .width('100%') + .height('100%') + .backgroundColor(Color.Pink) + .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.NONE) + } + .justifyContent(FlexAlign.Center) + .backgroundColor("#ff49c8ab") + .width('100%') + .height('100%') + .scale({ x: this.isScale1, y: this.isScale1 }) + .animation({ curve: curves.springMotion() }) + } +} +``` + +![zh-cn_full_screen_modal_none_2](figures/zh-cn_full_screen_modal_none_2.gif) + +### 示例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%') + .backgroundColor(Color.Gray) + } + + @Builder myBuilder() { + Column() { + Button("transition modal 2") + .margin(10) + .fontSize(20) + .onClick(()=>{ + this.isShow2 = true; + }).bindContentCover(this.isShow2, this.myBuilder2(), ModalTransition.DEFAULT) + + Button("close modal 1") + .margin(10) + .fontSize(20) + .onClick(()=>{ + this.isShow = false; + }) + } + .width('100%') + .height('100%') + .backgroundColor(Color.Pink) + .justifyContent(FlexAlign.Center) + } + + build() { + Column() { + Button("transition modal 1") + .onClick(() => { + this.isShow = true + }) + .fontSize(20) + .margin(10) + .bindContentCover($$this.isShow, this.myBuilder(), ModalTransition.DEFAULT) + } + .justifyContent(FlexAlign.Center) + .backgroundColor(Color.White) + .width('100%') + .height('100%') + } +} +``` + +![zh-cn_full_screen_modal_default](figures/zh-cn_full_screen_modal_default.gif) + +### 示例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%') + .backgroundColor(Color.Gray) + .justifyContent(FlexAlign.Center) + } + + + @Builder myBuilder() { + Column() { + Button("transition modal 2") + .margin(10) + .fontSize(20) + .onClick(()=>{ + this.isShow2 = true; + }).bindContentCover(this.isShow2, this.myBuilder2(), ModalTransition.ALPHA) + + Button("close modal 1") + .margin(10) + .fontSize(20) + .onClick(()=>{ + this.isShow = false; + }) + } + .width('100%') + .height('100%') + .backgroundColor(Color.Pink) + .justifyContent(FlexAlign.Center) + } + + build() { + Column() { + Button("transition modal 1") + .onClick(() => { + this.isShow = true + }) + .fontSize(20) + .margin(10) + .bindContentCover($$this.isShow, this.myBuilder(), ModalTransition.ALPHA) + } + .justifyContent(FlexAlign.Center) + .backgroundColor(Color.White) + .width('100%') + .height('100%') + } +} +``` + +![zh-cn_full_screen_modal_alpha](figures/zh-cn_full_screen_modal_alpha.gif) \ No newline at end of file diff --git a/zh-cn/application-dev/reference/arkui-ts/ts-universal-attributes-sheet-transition.md b/zh-cn/application-dev/reference/arkui-ts/ts-universal-attributes-sheet-transition.md new file mode 100644 index 0000000000000000000000000000000000000000..e4ea2b85c1ae1c3e20bf41e2b6ea7bd7bd9b1df4 --- /dev/null +++ b/zh-cn/application-dev/reference/arkui-ts/ts-universal-attributes-sheet-transition.md @@ -0,0 +1,92 @@ +# 半模态转场 + +通过bindSheet属性为组件绑定半模态页面,在组件插入时可通过设置自定义或默认的内置高度确定半模态大小。 + +> **说明: ** +> +> 从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## 属性 + +| 名称 | 参数 | 参数描述 | +| -------- | -------- | -------- | +| bindSheet | isShow: boolean,
builder: [CustomBuilder](ts-types.md#custombuilder8),
sheetStyle?: [SheetStyle](#sheetstyle10) | 给组件绑定半模态页面,点击后显示模态页面。isShow: 必填,是否显示半模态页面。
builder: 必填,配置半模态页面内容。
sheetStyle: 非必填,配置半模态页面高度和是否显示控制条,默认高度是Large,默认显示控制条。 | + +## SheetStyle10+ + +| 名称 | 类型 | 必填 | 描述 | +| ------------------ | -------------------------------------- | ---- | ---------------------- | +| height | [SheetSize](#sheetsize10) \| [Length](ts-types.md#length) | 否 | 半模态高度。 | +| showDragBar | boolean | 否 | 是否显示控制条。 | + +## SheetSize10+ + +| 名称 | 参数描述 | +| -------- | -------- | +| MEDIUM | 指定半模态高度为屏幕高度一半。 | +| LARGE | 指定半模态高度几乎为屏幕高度。 | + +## 示例 + +```ts +// xxx.ets +@Entry +@Component +struct SheetTransitionExample { + @State isShow:boolean = false + @State isShow2:boolean = false + @State sheetHeight:number = 300; + @State showDragBar:boolean = true; + + @Builder myBuilder() { + Column() { + Button("change height") + .margin(10) + .fontSize(20) + .onClick(()=>{ + this.sheetHeight = 500; + }) + + Button("Set Illegal height") + .margin(10) + .fontSize(20) + .onClick(()=>{ + this.sheetHeight = null; + }) + + Button("close dragBar") + .margin(10) + .fontSize(20) + .onClick(()=>{ + this.showDragBar = false; + }) + + Button("close modal 1") + .margin(10) + .fontSize(20) + .onClick(()=>{ + this.isShow = false; + }) + } + .width('100%') + .height('100%') + } + + build() { + Column() { + Button("transition modal 1") + .onClick(() => { + this.isShow = true + }) + .fontSize(20) + .margin(10) + .bindSheet($$this.isShow, this.myBuilder(), {height: this.sheetHeight, dragBar: this.showDragBar}) + } + .justifyContent(FlexAlign.Center) + .width('100%') + .height('100%') + } +} +``` + +![zh-cn_sheet](figures/zh-cn_sheet.gif) \ No newline at end of file