codecamp

共享元素转场

当路由进行切换时,可以通过设置组件的 sharedTransition 属性将该元素标记为共享元素并设置对应的共享元素转场动效。

说明

从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

属性

名称

参数

参数描述

sharedTransition

id: string,

{

duration?: number,

curve?: Curve | string,

delay?: number,

motionPath?:

{

path: string,

form?: number,

to?: number,

rotatable?: boolean

},

zIndex?: number,

type?: SharedTransitionEffectType

}

两个页面中id值相同且不为空字符串的组件即为共享元素,在页面转场时可显示共享元素转场动效。

- id:设置组件的id。

- duration:描述共享元素转场动效播放时长。

默认值:1000

单位:毫秒

取值范围:[0, +∞)

- curve:默认曲线为Linear,有效值参见Curve说明。

- delay:单位为毫秒,默认不延时播放。

默认值:0

单位:毫秒

取值范围:[0, +∞)

设置小于0的值时,按值为0处理。

- motionPath:运动路径信息,详细说明请参考路径动画

- path:设置路径。

- from:设置起始值。

- to:设置终止值。

- rotatable:是否旋转。

默认值:false

- zIndex:设置Z轴。

默认值:0

- type:动画类型。

默认值:SharedTransitionEffectType.Exchange

说明

type为SharedTransitionEffectType.Exchange时motionPath才会生效。

示例

示例代码为点击图片跳转页面时,显示共享元素图片的自定义转场动效。

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct SharedTransitionExample {
  5. @State active: boolean = false
  6. build() {
  7. Column() {
  8. Navigator({ target: 'pages/PageB', type: NavigationType.Push }) {
  9. Image($r('app.media.ic_health_heart')).width(50).height(50)
  10. .sharedTransition('sharedImage', { duration: 800, curve: Curve.Linear, delay: 100 })
  11. }.padding({ left: 20, top: 20 })
  12. .onClick(() => {
  13. this.active = true
  14. })
  15. }
  16. }
  17. }
  1. // PageB.ets
  2. @Entry
  3. @Component
  4. struct pageBExample {
  5. build() {
  6. Stack() {
  7. Image($r('app.media.ic_health_heart')).width(150).height(150)
  8. .sharedTransition('sharedImage', { duration: 800, curve: Curve.Linear, delay: 100 })
  9. }.width('100%').height('100%')
  10. }
  11. }

组件内转场
路径动画
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

媒体组件

像素

枚举

类型

接口

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }