HarmonyOS 鸿蒙Next中pageTransition转场动画

发布于 1周前 作者 nodeper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next中pageTransition转场动画 pageTransition进入页面的动画可以定义多种吗,从不同的地方打开,执行不同的动画?

3 回复

您可以通过给pageTransition的动画绑定上动态数据,通过路由传递的参数来判断,哪个页面需要实现哪种动画,demo如下:

import { router } from '@kit.ArkUI';

class transitionTranslateClass {
  x?: number | string;
  y?: number | string;
  z?: number | string

  constructor(x?: number | string, y?: number | string, z?: number | string,) {

    this.x = x

    this.y = y

    this.z = z

  }
}

class transitionScaleClass {
  x?: number;
  y?: number;
  z?: number;
  centerX?: number | string;
  centerY?: number | string;

  constructor(x?: number, y?: number, z?: number, centerX?: number | string, centerY?: number | string) {

    this.x = x

    this.y = y

    this.z = z

    this.centerX = centerX

    this.centerY = centerY

  }
}

@Entry
@Component
struct Page1 {
  @State transitionSlide: SlideEffect = 0
  @State transitionOpacity: number = 1
  @State transitionTranslate: transitionTranslateClass = new transitionTranslateClass()
  @State transitionScale: transitionScaleClass = new transitionScaleClass()

  onPageShow(): void {

    let params = router.getParams() as Record<string, string | number>;

    let data: string = params.data as string;

    if (data == 'Index') {

      this.transitionTranslate = new transitionTranslateClass(30, 30, 30)

    } else if (data == 'Page2') {

      this.transitionScale = new transitionScaleClass(2, 2, 2)

    }

  }

  build() {

    Column() {

      Text('page1')

      Button('跳转Page2').onClick((event: ClickEvent) => {

        router.pushUrl({ url: 'pages/Page2' })

      })

    }

  }

  pageTransition() {

    PageTransitionEnter({ duration: 1200, curve: Curve.Linear })

      .slide(this.transitionSlide)

      .opacity(this.transitionOpacity)

      .translate(this.transitionTranslate)

      .scale(this.transitionScale)

      .onEnter((type: RouteType, progress: number) => {

        if (type == RouteType.Push || type == RouteType.Pop) {

        }

      })

    PageTransitionExit({ duration: 1200, curve: Curve.Ease })

      .slide(SlideEffect.Bottom)

      .onExit((type: RouteType, progress: number) => {

        if (type == RouteType.Push) {

        }

      })

  }
}

pageTransition不支持replace跳转模式,您可以考虑使用Navigation替代。

更多关于HarmonyOS 鸿蒙Next中pageTransition转场动画的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)Next中,pageTransition转场动画用于定义页面之间的切换效果。开发者可以通过PageTransition接口来实现自定义的转场动画,包括页面进入和退出的动画效果。pageTransition支持多种动画类型,如平移、缩放、旋转、透明度变化等。开发者可以通过PageTransitiononEnteronExit方法分别定义页面进入和退出时的动画行为。onEnter方法用于设置页面进入时的动画,onExit方法用于设置页面退出时的动画。开发者可以通过AnimatorOption来配置具体的动画参数,如持续时间、延迟时间、插值器等。pageTransition还支持链式调用,可以在一个动画完成后继续执行下一个动画,从而实现复杂的转场效果。此外,pageTransition还可以与PageAbility结合使用,实现页面切换时的平滑过渡效果。通过PageTransition,开发者可以灵活地控制页面切换的视觉效果,提升用户体验。

在HarmonyOS(鸿蒙Next)中,pageTransition转场动画用于实现页面之间的平滑切换效果。开发者可以通过在ets文件中配置pageTransition属性来定义页面进入和离开时的动画效果。常见的动画类型包括fade(淡入淡出)、slide(滑动)、scale(缩放)等。例如:

@Entry
@Component
struct Index {
  build() {
    Column() {
      Text('Page Transition Example')
        .onClick(() => {
          // 页面跳转逻辑
        })
    }
    .pageTransition({ type: 'slide', duration: 300 })
  }
}

通过合理配置pageTransition,可以提升用户体验,使页面切换更加流畅自然。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!