HarmonyOS 页面跳转控制整个界面的转场动画

好 本文 我们来说 页面间的转场动画

就是 第一个界面到另一个界面

第一个界面的退场和第二个界面的进场效果

首先 我这里 创建了两个页面文件 Index.ets和AppView.ets

index组件 编写代码如下

typescript 复制代码
import router from "@ohos.router"
@Entry
@Component
struct Index {

  build() {
    Column({space: 30}) {
      Text("啦啦啦")
      Image("https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=317918699,1688031253&fm=253&gp=0.jpg")
        .width(100)
        .height(100)
        .onClick(()=> {
          router.pushUrl({
            url: "pages/AppView"
          })
        })
    }
    .width('100%')
    .height('100%')
  }
}

然后 AppView 组件 编写代码如下

typescript 复制代码
@Entry
@Component
struct AppView {
  build() {
    Column({space: 30}) {
      Text("文本组件")
      Image("https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=317918699,1688031253&fm=253&gp=0.jpg")
        .width("70%")
        .height("30%")
    }
    .width('100%')
    .height('100%')
  }
}

这里 我们在index 组件中 编写了 一个点击事件 onClick 点击路由跳转向 AppView组件

我们点击后 目前它确实是可以正常跳转

我们 harmonyOS中的跳转 只是从右到左这样 划过来

因为 我们组件元素都是在 build 元素上的

我们把属性加载 build 下面

typescript 复制代码
pageTransition() {
  // 进场效界
  PageTransitionEnter({ duration: 2000,curve: Curve.Linear })
  .onEnter((type: RouteType, progress: number) => {

  })
  // 退场效果。
  PageTransitionExit({ duration: 200 })
  .onExit((type: RouteType, progress: number) =>{

   })
}

PageTransitionEnter 控制进场动画

PageTransitionExit 控制退场动画

其实 给我的感觉甚至有点像生命周期

这里 我们改写 index 组件代码如下

typescript 复制代码
import router from "@ohos.router"
@Entry
@Component
struct Index {

  @State scale1:number = 1;

  build() {
    Column({space: 30}) {
      Text("啦啦啦")
      Image("https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=317918699,1688031253&fm=253&gp=0.jpg")
        .width(100)
        .height(100)
        .onClick(()=> {
          router.pushUrl({
            url: "pages/AppView"
          })
        })
        .opacity(this.scale1)
    }
    .width('100%')
    .height('100%')
  }
  pageTransition() {
    // 进场效界
    PageTransitionEnter({ duration: 2000,curve: Curve.Linear })
    .onEnter((type: RouteType, progress: number) => {

    })
    // 退场效果。
    PageTransitionExit({ duration: 2000 })
    .onExit((type: RouteType, progress: number) =>{
         this.scale1 = 1 - progress;
     })
  }
}

我们定义了一个 状态变量 叫 scale1 默认值 1

然后 绑定 opacity 控制元素透明度属性

然后在退场动画 PageTransitionExit.onExit 中 编写改变它透明度 为 progress

progress 在退场动画中 会反复调用 从 0直到1

我们直接那它的值 减去 1 我们 scale1

AppView 代码修改如下

typescript 复制代码
@Entry
@Component
struct AppView {

  @State scale1:number = 0;

  build() {
    Column({space: 30}) {
      Text("文本组件")
      Image("https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=317918699,1688031253&fm=253&gp=0.jpg")
        .width("70%")
        .height("30%")
        .opacity(this.scale1)
    }
    .width('100%')
    .height('100%')
  }
  pageTransition() {
    // 进场效界
    PageTransitionEnter({ duration: 2000,curve: Curve.Linear })
      .onEnter((type: RouteType, progress: number) => {
        this.scale1 = progress;
      })
    // 退场效果。
    PageTransitionExit({ duration: 200 })
      .onExit((type: RouteType, progress: number) =>{
      })
  }
}

还是定义了一个 scale1 状态变量 控制 opacity透明度属性

但是 我们默认值 给了 0 然后进场动画赋值为 progress

进场动画 progress默认0会一直赋值 到1

慢慢进场

我们点击跳转 效果如下图

相关推荐
Dream-Y.ocean8 小时前
鸿蒙PC平台宅匠 3D 室内设计适配实战:基于 Electron 壳方案的 Three.js 双渲染引擎与参数化户型编辑器开发
javascript·3d·harmonyos
行者-全栈开发9 小时前
【共创稿事节】HarmonyOS 应用上架全流程中的隐私合规:权限最小化、数据本地化与 AppAnalyzer 体检
harmonyos·鸿蒙·隐私合规·应用上架·agc·appanalyzer
贾伟康10 小时前
HarmonyOS API 26 UKey PIN 授权门禁:状态查询、失败归因与资源闭环
华为·harmonyos
Dream-Y.ocean16 小时前
鸿蒙PC平台星图遥感适配实战:基于 Electron 壳方案的纯 JavaScript 遥感图像处理引擎开发
javascript·electron·harmonyos
七月稻草人20 小时前
鸿蒙平板能当电脑第二块屏幕吗?ToDesk、向日葵镜像/副屏实测
华为·电脑·harmonyos
贾伟康21 小时前
【共创稿事节】HarmonyOS 7.0 Want隐式跳转:从接入到生产验证
性能优化·实战·harmonyos·arkts·arkui
NJPJI_Yang21 小时前
鸿蒙 HarmonyOS 7 应用内存优化:appMemoryOptimizer 释放 so 页缓存实战
pytorch·深度学习·harmonyos
翰德恩咨询1 天前
IPD咨询洞察:华为如何以项目为中心,激活组织
华为
熊猫钓鱼>_>1 天前
三方库 NDK 原生模块跨平台适配与调试【鸿蒙心迹】
开发语言·华为·ai编程·harmonyos·鸿蒙·openharmony·鸿蒙心迹
行者-全栈开发1 天前
【鸿蒙心迹】三方库移植(二)——CMake 交叉编译与符号冲突排查实录(HarmonyOS 7.x)
harmonyos·cmake·交叉编译·三方库移植·ohos·符号冲突