頁面間轉(zhuǎn)場

2024-01-22 18:18 更新

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

說明

從API Version 7開始支持。后續(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)前頁面的自定義入場動效。

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

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

- duration:動畫的時長。

單位:毫秒。

- curve:動畫曲線。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:動畫延遲時長。

單位:毫秒

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

說明:

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

PageTransitionExit

{

type?: RouteType,

duration?: number,

curve?: Curve | string,

delay?: number

}

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

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

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

- duration:動畫的時長,單位為毫秒。

- curve:動畫曲線,string類型取值與PageTransitionEnter相同。

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

- delay:動畫延遲時長,單位為毫秒,默認(rèn)不延遲播放。

默認(rèn)值:0

單位:毫秒

說明:

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

RouteType枚舉說明

名稱

描述

Pop

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

Push

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

None

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

屬性

參數(shù)名稱

參數(shù)

必填

參數(shù)描述

slide

SlideEffect

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

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

translate

{

x? : number | string,

y? : number | string,

z? : number | string

}

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

- x:橫向的平移距離。

- y:縱向的平移距離。

- z:豎向的平移距離。

scale

{

x? : number,

y? : number,

z? : number,

centerX? : number | string,

centerY? : number | string

}

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

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

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

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

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

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

opacity

number

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

默認(rèn)值:1

SlideEffect枚舉說明

名稱

描述

Left

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

Right

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

Top

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

Bottom

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

事件

事件

功能描述

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

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

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

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

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

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

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

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

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

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

示例

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

  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)場過程的效果
  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)場過程中會逐幀觸發(fā)onEnter回調(diào),入?yún)閯有У臍w一化進(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. }) // 退場過程中會逐幀觸發(fā)onExit回調(diào),入?yún)閯有У臍w一化進(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)場過程的效果
  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)場過程中會逐幀觸發(fā)onEnter回調(diào),入?yún)閯有У臍w一化進(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. }) // 退場過程中會逐幀觸發(fā)onExit回調(diào),入?yún)閯有У臍w一化進(jìn)度(0% -- 100%)
  26. }
  27. }

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

  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)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號