鸿蒙应用开发中,使用systemTransition.None关闭页面转场动画,pop此页面再push其他页面时会有延迟现象
·
当某个页面(这里为页面2)的systemTransition属性设置为None时:
@Component
struct Page02 {
pathStack: NavPathStack | undefined = undefined;
build() {
NavDestination() {
......
}.title('页面2')
.backgroundColor('#ffffdbdb')
.systemTransition(NavigationSystemTransitionType.NONE)
.onReady((context: NavDestinationContext) => {
this.pathStack = context.pathStack;
})
}
}
如果在页面2里先pop再push一个页面3,会发现页面2会停留一会然后跳转到页面3,具体操作如下:
Button(`pop, push Page03 (normal)`).width('80%').margin({ top: 10, bottom: 10 })
.onClick(() => {
this.pathStack?.pop();
this.pathStack?.pushPath({ name: 'Page03' });
})
效果如下:

这是因为在进行跳转时,一般情况下,如果跳转后,栈顶页面不在栈中(这里表现为页面2被pop出栈),那么跳转就会执行pop动画。
在pop动画中,栈顶页面(这里为页面2)会一直处于最上层,直到动画结束才会消失,所以整个动画过程中(不到500ms左右)页面2会一直在屏幕上,视觉效果就是页面2延迟跳转。
这个场景可以使用NEW_INSTANCE来规避,有了NEW_INSTANCE,即使跳转后栈顶页面不在栈中,跳转也会执行push动画。
在push动画中,新的栈顶页面(这里为页面3)会一直处于最上层,而原先的栈顶页面(这里为页面2)会被新的栈顶页面遮住,这样视觉效果就是只有页面3在做push动画,示例如下:
Button(`pop, push Page03 (normal)`).width('80%').margin({ top: 10, bottom: 10 })
.onClick(() => {
this.pathStack?.pop();
this.pathStack?.pushPath({ name: 'Page03' }, { launchMode: LaunchMode.NEW_INSTANCE });
})
效果如下:

更多推荐

所有评论(0)