当前位置:   article > 正文

【HarmonyOS】ArkTS学习之页面转场动画的实现_arkts page

arkts page

【关键字】
ArkTS、转场动画、PageTransitionEnter、PageTransitionExit

【介绍】
动画交互的实现是一种提升用户体验的方式。动画分为属性属性动画、显示动画、转场动画和路径动画,而转场动画又包含页面间转场、组件内转场和共享元素转场。我觉得页面转场动画挺有趣的,所以今天就浅浅的给大家分享一个用ArkTS实现页面转场动画的demo。
ArkTS是通过在全局pageTransition方法内配置页面入场(PageTransitionEnter)和页面退场(PageTransitionExit)时的自定义转场动效来实现页面转场动画的,下图是关于PageTransitionEnter和PageTransitionExit的说明

cke_3236.png​​​​

PageTransitionEnter和PageTransitionExit分别支持以下两种方法

cke_5249.png​​

PageTransitionEnter和PageTransitionExit共同支持以下属性:

  • slide:设置页面转场时的滑入滑出效果。默认值:SlideEffect.Right。
  • translate:设置页面转场时的缩放效果,为入场时起点和退场时终点的值。
  • opacity:设置入场的起点透明度值或者退场的终点透明度值,默认值:1。
  • scale:设置页面转场时的缩放效果,为入场时起点和退场时终点的值。
    更多的使用请参考文章底部的相关参考部分。

【成果展示】

我们先来看最终的实现成果:
由于不支持上传视频,放附件了,感兴趣的同学可点开附件查看。
第一个页面的代码:

  1. @Entry
  2. @Component
  3. struct PageTransitionExample1 {
  4. @State scale1: number = 1 // 默认放缩比例
  5. @State opacity1: number = 1 // 默认不透明度
  6. build() {
  7. Column() {
  8. // 用路由容器组件来实现跳转
  9. Navigator({ target: 'pages/Page2', type: NavigationType.Push }) { // 设置指定跳转目标页面的路径和路由方式
  10. Image('Common/image/img.png').width('100%').height('100%')
  11. }
  12. }.scale({ x: this.scale1 }).opacity(this.opacity1)
  13. }
  14. // 添加全局pageTransition方法
  15. pageTransition() {
  16. PageTransitionEnter({ duration: 2000, curve: Curve.Linear }) // 设置当前页面入场动画的配置信息:执行时间和动画曲线
  17. .opacity(0.3) // 设置入场的起点透明度值或者退场的终点透明度值
  18. .slide(SlideEffect.Top) // 设置页面转场时的滑入滑出效果
  19. .onEnter((type: RouteType, progress: number) => { // 每一帧的动画事件回调
  20. this.scale1 = 1
  21. this.opacity1 = progress
  22. })
  23. PageTransitionExit({ duration: 2000, curve: Curve.Ease }) // 设置当前页面退场动画的配置信息:执行时间和动画曲线
  24. .translate({x: 10, y: 20, z: 30})
  25. .scale({x: 0.5, y: 0.5, z: 0.5,})
  26. .onExit((type: RouteType, progress: number) => { // 每一帧的动画事件回调
  27. this.scale1 = 1 - progress
  28. this.opacity1 = 1- progress
  29. })
  30. }
  31. }

第二个页面的代码:

  1. @Entry
  2. @Component
  3. struct AExample {
  4. @State scale2: number = 1
  5. @State opacity2: number = 1
  6. build() {
  7. Column() {
  8. Navigator({ target: 'pages/index', type: NavigationType.Push }) {
  9. Image('Common/image/mdh.jpeg').width('100%').height('100%')
  10. }
  11. }.width('100%').height('100%').scale({ x: this.scale2 }).opacity(this.opacity2)
  12. }
  13. pageTransition() {
  14. PageTransitionEnter({
  15. type: RouteType.Push,
  16. duration: 1200,
  17. curve: Curve.Linear,
  18. delay: 1000
  19. }) .opacity(0.3) // 设置入场的起点透明度值或者退场的终点透明度值
  20. .slide(SlideEffect.Bottom) // 设置页面转场时的滑入滑出效果
  21. .onEnter((type: RouteType, progress: number) => {
  22. // console.log(progress + 'progress');
  23. this.scale2 = 1
  24. this.opacity2 = progress
  25. })
  26. PageTransitionExit({
  27. duration: 2000,
  28. curve: Curve.Ease,
  29. type: RouteType.Pop,
  30. delay: 1000
  31. })
  32. .scale({x: 0.5, y: 0.5, z: 0.5,})
  33. .translate({x: 10, y: 20, z: 30})
  34. // .slide(SlideEffect.Right)
  35. .onExit((type: RouteType, progress: number) => {
  36. this.scale2 = 1 - progress
  37. this.opacity2 = 1 - progress
  38. })
  39. }
  40. }

【效果展示】

GIF2.gif

以上就是我的分享啦!

【相关参考】
1、路由组件使用:https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-container-navigator-0000001427584884-V3

2、转场动画实现:https://developer.harmonyos.com/cn/docs/documentation/doc-references-V3/ts-page-transition-animation-0000001477981233-V3

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/323452
推荐阅读
相关标签
  

闽ICP备14008679号