頁(yè)面間轉(zhuǎn)場(chǎng)

2024-01-22 18:18 更新

在全局pageTransition方法內(nèi)配置頁(yè)面入場(chǎng)和頁(yè)面退場(chǎng)時(shí)的自定義轉(zhuǎn)場(chǎng)動(dòng)效。

說(shuō)明

從API Version 7開(kāi)始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨(dú)標(biāo)記該內(nèi)容的起始版本。

名稱

參數(shù)

必填

參數(shù)描述

PageTransitionEnter

{

type?: RouteType,

duration?: number,

curve?: Curve | string,

delay?: number

}

設(shè)置當(dāng)前頁(yè)面的自定義入場(chǎng)動(dòng)效。

- type:頁(yè)面轉(zhuǎn)場(chǎng)效果生效的路由類型。

默認(rèn)值:RouteType.None

- duration:動(dòng)畫(huà)的時(shí)長(zhǎng)。

單位:毫秒。

- curve:動(dòng)畫(huà)曲線。string類型的取值支持"ease"、"ease-in"、"ease-out"、"ease-in-out"、"extreme-deceleration"、"fast-out-linear-in"、"fast-out-slow-in"、"friction"、"linear"、"linear-out-slow-in"、"rhythm"、"sharp"、"smooth"。

默認(rèn)值:Curve.Linear

- delay:動(dòng)畫(huà)延遲時(shí)長(zhǎng)。

單位:毫秒

默認(rèn)值:0,默認(rèn)不延遲播放。

說(shuō)明:

沒(méi)有匹配時(shí)使用系統(tǒng)默認(rèn)的頁(yè)面轉(zhuǎn)場(chǎng)效果(根據(jù)設(shè)備可能會(huì)有差異),如需禁用系統(tǒng)默認(rèn)頁(yè)面轉(zhuǎn)場(chǎng)效果,可以指定duration為0。

PageTransitionExit

{

type?: RouteType,

duration?: number,

curve?: Curve | string,

delay?: number

}

設(shè)置當(dāng)前頁(yè)面的自定義退場(chǎng)動(dòng)效。

- type:頁(yè)面轉(zhuǎn)場(chǎng)效果生效的路由類型。

默認(rèn)值:RouteType.None。

- duration:動(dòng)畫(huà)的時(shí)長(zhǎng),單位為毫秒。

- curve:動(dòng)畫(huà)曲線,string類型取值與PageTransitionEnter相同。

默認(rèn)值:Curve.Linear

- delay:動(dòng)畫(huà)延遲時(shí)長(zhǎng),單位為毫秒,默認(rèn)不延遲播放。

默認(rèn)值:0

單位:毫秒

說(shuō)明:

沒(méi)有匹配時(shí)使用系統(tǒng)默認(rèn)的頁(yè)面轉(zhuǎn)場(chǎng)效果(根據(jù)設(shè)備可能會(huì)有差異),如需禁用系統(tǒng)默認(rèn)頁(yè)面轉(zhuǎn)場(chǎng)效果,可以指定duration為0。

RouteType枚舉說(shuō)明

名稱

描述

Pop

重定向指定頁(yè)面。從PageB回退到之前的頁(yè)面PageA。對(duì)于PageB,指定RouteType為None或者Pop的PageTransitionExit組件樣式生效,對(duì)于PageA,指定RouteType為None或者Pop的PageTransitionEnter組件樣式生效。

Push

跳轉(zhuǎn)到下一頁(yè)面。PageA跳轉(zhuǎn)到下一個(gè)新的界面PageB。對(duì)于PageA,指定RouteType為None或者Push的PageTransitionExit組件樣式生效,對(duì)于PageB,指定RouteType為None或者Push的PageTransitionEnter組件樣式生效。

None

頁(yè)面未重定向。如Push和Pop描述中RouteType為None的情形,即頁(yè)面進(jìn)場(chǎng)時(shí)PageTransitionEnter的轉(zhuǎn)場(chǎng)效果生效;退場(chǎng)時(shí)PageTransitionExit的轉(zhuǎn)場(chǎng)效果生效。

屬性

參數(shù)名稱

參數(shù)

必填

參數(shù)描述

slide

SlideEffect

設(shè)置頁(yè)面轉(zhuǎn)場(chǎng)時(shí)的滑入滑出效果。

默認(rèn)值:SlideEffect.Right

translate

{

x? : number | string,

y? : number | string,

z? : number | string

}

設(shè)置頁(yè)面轉(zhuǎn)場(chǎng)時(shí)的平移效果,為入場(chǎng)時(shí)起點(diǎn)和退場(chǎng)時(shí)終點(diǎn)的值,和slide同時(shí)設(shè)置時(shí)默認(rèn)生效slide。

- x:橫向的平移距離。

- y:縱向的平移距離。

- z:豎向的平移距離。

scale

{

x? : number,

y? : number,

z? : number,

centerX? : number | string,

centerY? : number | string

}

設(shè)置頁(yè)面轉(zhuǎn)場(chǎng)時(shí)的縮放效果,為入場(chǎng)時(shí)起點(diǎn)和退場(chǎng)時(shí)終點(diǎn)的值。

- x:橫向放大倍數(shù)(或縮小比例)。

- y:縱向放大倍數(shù)(或縮小比例)。

- z:豎向放大倍數(shù)(或縮小比例)。

- centerX、centerY縮放中心點(diǎn)。

- 中心點(diǎn)為0時(shí),默認(rèn)的是組件的左上角。

opacity

number

設(shè)置入場(chǎng)的起點(diǎn)透明度值或者退場(chǎng)的終點(diǎn)透明度值。

默認(rèn)值:1

SlideEffect枚舉說(shuō)明

名稱

描述

Left

設(shè)置到入場(chǎng)時(shí)表示從左邊滑入,出場(chǎng)時(shí)表示滑出到左邊。

Right

設(shè)置到入場(chǎng)時(shí)表示從右邊滑入,出場(chǎng)時(shí)表示滑出到右邊。

Top

設(shè)置到入場(chǎng)時(shí)表示從上邊滑入,出場(chǎng)時(shí)表示滑出到上邊。

Bottom

設(shè)置到入場(chǎng)時(shí)表示從下邊滑入,出場(chǎng)時(shí)表示滑出到下邊。

事件

事件

功能描述

onEnter(event: (type?: RouteType, progress?: number) => void)

回調(diào)入?yún)楫?dāng)前入場(chǎng)動(dòng)畫(huà)的歸一化進(jìn)度[0 - 1]。

- type:跳轉(zhuǎn)方法。

- progress:當(dāng)前進(jìn)度。

觸發(fā)該事件的條件:逐幀回調(diào),直到入場(chǎng)動(dòng)畫(huà)結(jié)束,progress從0變化到1。

onExit(event: (type?: RouteType, progress?: number) => void)

回調(diào)入?yún)楫?dāng)前退場(chǎng)動(dòng)畫(huà)的歸一化進(jìn)度[0 - 1]。

- type:跳轉(zhuǎn)方法。

- progress:當(dāng)前進(jìn)度。

觸發(fā)該事件的條件:逐幀回調(diào),直到退場(chǎng)動(dòng)畫(huà)結(jié)束,progress從0變化到1。

示例

自定義方式1:配置了當(dāng)前頁(yè)面的入場(chǎng)動(dòng)畫(huà)為淡入,退場(chǎng)動(dòng)畫(huà)為縮小。

  1. // index.ets
  2. @Entry
  3. @Component
  4. struct PageTransitionExample1 {
  5. @State scale1: number = 1
  6. @State opacity1: number = 1
  7. build() {
  8. Column() {
  9. Navigator({ target: 'pages/page1', type: NavigationType.Push }) {
  10. Image($r('app.media.bg1')).width('100%').height('100%') // 圖片存放在media文件夾下
  11. }
  12. }.scale({ x: this.scale1 }).opacity(this.opacity1)
  13. }
  14. // 自定義方式1:完全自定義轉(zhuǎn)場(chǎng)過(guò)程的效果
  15. pageTransition() {
  16. PageTransitionEnter({ duration: 1200, curve: Curve.Linear })
  17. .onEnter((type: RouteType, progress: number) => {
  18. this.scale1 = 1
  19. this.opacity1 = progress
  20. }) // 進(jìn)場(chǎng)過(guò)程中會(huì)逐幀觸發(fā)onEnter回調(diào),入?yún)閯?dòng)效的歸一化進(jìn)度(0% -- 100%)
  21. PageTransitionExit({ duration: 1500, curve: Curve.Ease })
  22. .onExit((type: RouteType, progress: number) => {
  23. this.scale1 = 1 - progress
  24. this.opacity1 = 1
  25. }) // 退場(chǎng)過(guò)程中會(huì)逐幀觸發(fā)onExit回調(diào),入?yún)閯?dòng)效的歸一化進(jìn)度(0% -- 100%)
  26. }
  27. }
  1. // page1.ets
  2. @Entry
  3. @Component
  4. struct AExample {
  5. @State scale2: number = 1
  6. @State opacity2: number = 1
  7. build() {
  8. Column() {
  9. Navigator({ target: 'pages/index', type: NavigationType.Push }) {
  10. Image($r('app.media.bg2')).width('100%').height('100%') // 圖片存放在media文件夾下
  11. }
  12. }.width('100%').height('100%').scale({ x: this.scale2 }).opacity(this.opacity2)
  13. }
  14. // 自定義方式1:完全自定義轉(zhuǎn)場(chǎng)過(guò)程的效果
  15. pageTransition() {
  16. PageTransitionEnter({ duration: 1200, curve: Curve.Linear })
  17. .onEnter((type: RouteType, progress: number) => {
  18. this.scale2 = 1
  19. this.opacity2 = progress
  20. }) // 進(jìn)場(chǎng)過(guò)程中會(huì)逐幀觸發(fā)onEnter回調(diào),入?yún)閯?dòng)效的歸一化進(jìn)度(0% -- 100%)
  21. PageTransitionExit({ duration: 1500, curve: Curve.Ease })
  22. .onExit((type: RouteType, progress: number) => {
  23. this.scale2 = 1 - progress
  24. this.opacity2 = 1
  25. }) // 退場(chǎng)過(guò)程中會(huì)逐幀觸發(fā)onExit回調(diào),入?yún)閯?dòng)效的歸一化進(jìn)度(0% -- 100%)
  26. }
  27. }

自定義方式2:配置了當(dāng)前頁(yè)面的入場(chǎng)動(dòng)畫(huà)為從左側(cè)滑入,退場(chǎng)為縮小加透明度變化。

  1. // index.ets
  2. @Entry
  3. @Component
  4. struct PageTransitionExample {
  5. @State scale1: number = 1
  6. @State opacity1: number = 1
  7. build() {
  8. Column() {
  9. Navigator({ target: 'pages/page1', type: NavigationType.Push }) {
  10. Image($r('app.media.bg1')).width('100%').height('100%') // 圖片存放在media文件夾下
  11. }
  12. }.scale({ x: this.scale1 }).opacity(this.opacity1)
  13. }
  14. // 自定義方式2:使用系統(tǒng)提供的多種默認(rèn)效果(平移、縮放、透明度等)
  15. pageTransition() {
  16. PageTransitionEnter({ duration: 1200 })
  17. .slide(SlideEffect.Left)
  18. PageTransitionExit({ delay: 100 })
  19. .translate({ x: 100.0, y: 100.0 })
  20. .opacity(0)
  21. }
  22. }
  1. // page1.ets
  2. @Entry
  3. @Component
  4. struct PageTransitionExample1 {
  5. @State scale2: number = 1
  6. @State opacity2: number = 1
  7. build() {
  8. Column() {
  9. Navigator({ target: 'pages/index', type: NavigationType.Push }) {
  10. Image($r('app.media.bg2')).width('100%').height('100%') // 圖片存放在media文件夾下
  11. }
  12. }.scale({ x: this.scale2 }).opacity(this.opacity2)
  13. }
  14. // 自定義方式2:使用系統(tǒng)提供的多種默認(rèn)效果(平移、縮放、透明度等)
  15. pageTransition() {
  16. PageTransitionEnter({ duration: 1200 })
  17. .slide(SlideEffect.Left)
  18. PageTransitionExit({ delay: 100 })
  19. .translate({ x: 100.0, y: 100.0 })
  20. .opacity(0)
  21. }
  22. }

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)