鸿蒙开发系列教程(二十)--页面间动画

页面间动画

两个页面间发生跳转,一个页面消失,另一个页面出现,这时可以配置各自页面的页面转场参数实现自定义的页面转场效果

页面进入:

PageTransitionEnter({type?: RouteType,duration?: number,curve?: Curve | string,delay?: number})

页面退出:

PageTransitionExit({type?: RouteType,duration?: number,curve?: Curve | string,delay?: number})

可通过slide、translate、scale、opacity属性定义不同的页面转场效果。

参数type:表示路由生效的类型

页面转场的两个页面,必定有一个页面退出,一个页面进入

1、type配置为RouteType.None

type为RouteType.None表示对页面栈的push、pop操作均生效,type的默认值为RouteType.None。
在这里插入图片描述

// page A
pageTransition() {// 定义页面进入时的效果,从左侧滑入,时长为1200ms,无论页面栈发生push还是pop操作均可生效PageTransitionEnter({ type: RouteType.None, duration: 1200 }).slide(SlideEffect.Left)// 定义页面退出时的效果,向左侧滑出,时长为1000ms,无论页面栈发生push还是pop操作均可生效PageTransitionExit({ type: RouteType.None, duration: 1000 }).slide(SlideEffect.Left)
}// page B
pageTransition() {// 定义页面进入时的效果,从右侧滑入,时长为1000ms,无论页面栈发生push还是pop操作均可生效PageTransitionEnter({ type: RouteType.None, duration: 1000 }).slide(SlideEffect.Right)// 定义页面退出时的效果,向右侧滑出,时长为1200ms,无论页面栈发生push还是pop操作均可生效PageTransitionExit({ type: RouteType.None, duration: 1200 }).slide(SlideEffect.Right)
}

2、type配置为RouteType.Push或RouteType.Pop

type为RouteType.Push表示仅对页面栈的push操作生效,type为RouteType.Pop表示仅对页面栈的pop操作生效。

在这里插入图片描述

// page A
pageTransition() {// 定义页面进入时的效果,从右侧滑入,时长为1200ms,页面栈发生push操作时该效果才生效PageTransitionEnter({ type: RouteType.Push, duration: 1200 }).slide(SlideEffect.Right)// 定义页面进入时的效果,从左侧滑入,时长为1200ms,页面栈发生pop操作时该效果才生效PageTransitionEnter({ type: RouteType.Pop, duration: 1200 }).slide(SlideEffect.Left)// 定义页面退出时的效果,向左侧滑出,时长为1000ms,页面栈发生push操作时该效果才生效PageTransitionExit({ type: RouteType.Push, duration: 1000 }).slide(SlideEffect.Left)// 定义页面退出时的效果,向右侧滑出,时长为1000ms,页面栈发生pop操作时该效果才生效PageTransitionExit({ type: RouteType.Pop, duration: 1000 }).slide(SlideEffect.Right)
}// page B
pageTransition() {// 定义页面进入时的效果,从右侧滑入,时长为1000ms,页面栈发生push操作时该效果才生效PageTransitionEnter({ type: RouteType.Push, duration: 1000 }).slide(SlideEffect.Right)// 定义页面进入时的效果,从左侧滑入,时长为1000ms,页面栈发生pop操作时该效果才生效PageTransitionEnter({ type: RouteType.Pop, duration: 1000 }).slide(SlideEffect.Left)// 定义页面退出时的效果,向左侧滑出,时长为1200ms,页面栈发生push操作时该效果才生效PageTransitionExit({ type: RouteType.Push, duration: 1200 }).slide(SlideEffect.Left)// 定义页面退出时的效果,向右侧滑出,时长为1200ms,页面栈发生pop操作时该效果才生效PageTransitionExit({ type: RouteType.Pop, duration: 1200 }).slide(SlideEffect.Right)
}

3、禁用某页面的页面转场

pageTransition() {
PageTransitionEnter({ type: RouteType.None, duration: 0 })
PageTransitionExit({ type: RouteType.None, duration: 0 })
}

4、示例1:四种页面转场样式

aaa.ets

import router from '@ohos.router';
@Entry
@Component
struct PageTransitionSrc1 {build() {Column() {Image($r('app.media.a6')).width('90%').height('80%').objectFit(ImageFit.Fill).syncLoad(true) // 同步加载图片,使页面出现时图片已经加载完成.margin(30)Row({ space: 10 }) {Button("pushUrl").onClick(() => {// 路由到下一个页面,push操作router.pushUrl({ url: 'pages/bbb' });})Button("back").onClick(() => {// 返回到上一页面,相当于pop操作router.back();})}.justifyContent(FlexAlign.Center)}.width("100%").height("100%").alignItems(HorizontalAlign.Center)}pageTransition() {// 定义页面进入时的效果,从右侧滑入,时长为1000ms,页面栈发生push操作时该效果才生效PageTransitionEnter({ type: RouteType.Push, duration: 1000 }).slide(SlideEffect.Right)// 定义页面进入时的效果,从左侧滑入,时长为1000ms,页面栈发生pop操作时该效果才生效PageTransitionEnter({ type: RouteType.Pop, duration: 1000 }).slide(SlideEffect.Left)// 定义页面退出时的效果,向左侧滑出,时长为1000ms,页面栈发生push操作时该效果才生效PageTransitionExit({ type: RouteType.Push, duration: 1000 }).slide(SlideEffect.Left)// 定义页面退出时的效果,向右侧滑出,时长为1000ms,页面栈发生pop操作时该效果才生效PageTransitionExit({ type: RouteType.Pop, duration: 1000 }).slide(SlideEffect.Right)}
}

bbb.ets

import router from '@ohos.router';
@Entry
@Component
struct PageTransitionDst1 {build() {Column() {Image($r('app.media.a8')).width('90%').height('80%').objectFit(ImageFit.Fill).syncLoad(true) // 同步加载图片,使页面出现时图片已经加载完成.margin(30)Row({ space: 10 }) {Button("pushUrl").onClick(() => {// 路由到下一页面,push操作router.pushUrl({ url: 'pages/aaa' });})Button("back").onClick(() => {// 返回到上一页面,相当于pop操作router.back();})}.justifyContent(FlexAlign.Center)}.width("100%").height("100%").alignItems(HorizontalAlign.Center)}pageTransition() {// 定义页面进入时的效果,从右侧滑入,时长为1000ms,页面栈发生push操作时该效果才生效PageTransitionEnter({ type: RouteType.Push, duration: 1000 }).slide(SlideEffect.Right)// 定义页面进入时的效果,从左侧滑入,时长为1000ms,页面栈发生pop操作时该效果才生效PageTransitionEnter({ type: RouteType.Pop, duration: 1000 }).slide(SlideEffect.Left)// 定义页面退出时的效果,向左侧滑出,时长为1000ms,页面栈发生push操作时该效果才生效PageTransitionExit({ type: RouteType.Push, duration: 1000 }).slide(SlideEffect.Left)// 定义页面退出时的效果,向右侧滑出,时长为1000ms,页面栈发生pop操作时该效果才生效PageTransitionExit({ type: RouteType.Pop, duration: 1000 }).slide(SlideEffect.Right)}
}

resources/base/main_pages.json

{"src": ["pages/Index","pages/aaa","pages/bbb","pages/Test02"]
}

请添加图片描述

5、示例2:type为None的页面转场动画

aaa.ets

import router from '@ohos.router';
@Entry
@Component
struct PageTransitionSrc2 {build() {Column() {Image($r('app.media.a6')).width('90%').height('80%').objectFit(ImageFit.Fill).syncLoad(true) // 同步加载图片,使页面出现时图片已经加载完成.margin(30)Row({ space: 10 }) {Button("pushUrl").onClick(() => {// 路由到下一页面,push操作router.pushUrl({ url: 'pages/bbb' });})Button("back").onClick(() => {// 返回到上一页面,相当于pop操作router.back();})}.justifyContent(FlexAlign.Center)}.width("100%").height("100%").alignItems(HorizontalAlign.Center)}pageTransition() {// 定义页面进入时的效果,从左侧滑入,时长为1000ms,无论页面栈发生push还是pop操作均可生效PageTransitionEnter({ duration: 1000 }).slide(SlideEffect.Left)// 定义页面退出时的效果,相对于正常页面位置x方向平移100vp,y方向平移100vp,透明度变为0,时长为1200ms,无论页面栈发生push还是pop操作均可生效PageTransitionExit({ duration: 1200 }).translate({ x: 100.0, y: 100.0 }).opacity(0)}
}

bbb.ets

import router from '@ohos.router';
@Entry
@Component
struct PageTransitionDst2 {build() {Column() {Image($r('app.media.a8')).width('90%').height('80%').objectFit(ImageFit.Fill).syncLoad(true) // 同步加载图片,使页面出现时图片已经加载完成.margin(30)Row({ space: 10 }) {Button("pushUrl").onClick(() => {// 路由到下一页面,push操作router.pushUrl({ url: 'pages/aaa' });})Button("back").onClick(() => {// 返回到上一页面,相当于pop操作router.back();})}.justifyContent(FlexAlign.Center)}.width("100%").height("100%").alignItems(HorizontalAlign.Center)}pageTransition() {// 定义页面进入时的效果,从左侧滑入,时长为1200ms,无论页面栈发生push还是pop操作均可生效PageTransitionEnter({ duration: 1200 }).slide(SlideEffect.Left)// 定义页面退出时的效果,相对于正常页面位置x方向平移100vp,y方向平移100vp,透明度变为0,时长为1000ms,无论页面栈发生push还是pop操作均可生效PageTransitionExit({ duration: 1000 }).translate({ x: 100.0, y: 100.0 }).opacity(0)}
}

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/682011.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Java程序设计】【C00269】基于Springboot的漫画网站(有论文)

基于Springboot的漫画网站(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的漫画网站 本系统分为系统功能模块、管理员功能模块、以及用户功能模块。 系统功能模块:在系统首页可以查看首页、漫画投稿、…

MacBook Pro如何安装rust编程环境

安装过程分为以下几步: 1. 安装Homebrew。Homebrew是一个流行的MacOS的包管理器,可用于方便地安装各种软件。打开终端,运行以下命令: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD…

CTFshow web(php命令执行 68-71)

web68 还是那句话,没看到flag在哪,那就优先找到flag位置 这里cvar_dump(scandir("/")); 直接输出根目录的位置,然后查看源代码,发现flag位置为flag.txt 知道flag在根目录下面的flag.txt直接访问就好了 cinclude(/flag…

计算机网络——10FTP

FTP FTP:文件传输协议 向远程主机上传输文件或从远程主机接收文件客户/服务器模式 客户端:发起传输的一方服务器:远程主机 ftp:RFC 959ftp服务器:端口号为21 FTP:控制连接与数据连接分开 控制连接 FTP客户端与FTP服…

谷粒商城【成神路】-【6】——商品维护

目录 🧂1.发布商品 🥓2.获取分类关联品牌 🌭3.获取分类下所有分组和关联属性 🍿4.商品保存功能 🧈5.sup检索 🥞6.sku检索 1.发布商品 获取用户系统等级~,前面生成了后端代码&#xff…

Rust的if let语法:更简洁的模式匹配

在Rust中,if let是一种简洁的模式匹配语法,用于处理只关心一种匹配而忽略其他匹配的情况。这种语法不仅使代码更精炼,减少了缩进和模板代码,还放弃了穷举所有可能的情况,使得代码更加简洁易读。 if let语法的基本使用…

寒假思维训练day21

今天更新一道不错的状态压缩DP题,顺带总结一下状态压缩DP。 摘要: Part1 浅谈状态压缩DP的理解 Part2 浅谈对状态机DP的理解 Part3 关于状态压缩DP的1道例题 Part1 状态压缩DP 1、状态压缩DP: 事物的状态可能包含多个特征,…

算法基础——单调栈,单调队列

目录 1.单调栈 例题:【模板】单调栈 例题:求和 2.单调队列 例题:滑动窗口 1.单调栈 例题:【模板】单调栈 可以想象出一个柱状图,值越大,这个柱子越高 以此题的样例为例: 第一个数为7,想…

mysql全国省市县三级联动创表sql(一)

1. 建表sql CREATE TABLE province (id VARCHAR ( 32 ) PRIMARY KEY COMMENT 主键,code CHAR ( 6 ) NOT NULL COMMENT 省份编码,name VARCHAR ( 40 ) NOT NULL COMMENT 省份名称 ) COMMENT 省份信息表;CREATE TABLE city (id VARCHAR ( 32 ) PRIMARY KEY COMMENT 主键,code …

Atmel ATSHA204应用总结

1 ACES软件安装 Atmel Crypto Evaluation Studio (ACES) https://www.microchip.com/DevelopmentTools/ProductDetails/PartNO/Atmel%20Crypto%20%20Studio%20(ACES) 2 基本概念 ACES CE:Atmel Crypto Evalution Studio Configuration Environment(基于加…

[Python] 如何用import导入模块

本篇博客来记以下关于import导入模块的笔记~ 可莉将这篇博客收录在了:《Python》 可莉推荐的优质博主主页:Kevin ’ s blog 我们在Python中可以使用import从标准库中导入一天模块,模块相当于是一个 .py 文件,我们导入后调用相当于…

Linux Chrome无法启动的原因(适用于Linux Edge)

文章目录 前言问题发现解决方案推广到Edge 前言 被Windows给贯坏了,因为Windows重启之后能够始终加载上一次没能关闭的页面,这就让我使用这种方法保存当前不想关、收藏了也容易忘的页面。结果这种操作直接导致Linux上的chrome就直接启动不了。记录一下解…

crack实验

资源下载 【免费】crack资源(这玩意还要不少于11字)资源-CSDN文库 内容 源码 这是一段简单的密码判断程序 流程 exe直接用ida开(因该是release的exe) 选中分支点直接按空格 此时的va地址是0010106e用动态调试软件调试&#xf…

tar 磁带归档工具

tar.gz 或者 tgz 文件的创建 1.先使用libtar 完成归档 2.在使用zlib gzip 压缩tar.gz 或者 tgz 文件的解压缩 1.先使用zlib gzip 解压缩 2.在使用libtar 解归档比较容易实现的方式

轻松入门MySQL:利用MySQL时间函数优化产品销售数据统计与分析(9)

在产品销售数据的统计与分析过程中,MySQL的时间函数是不可或缺的工具。这些函数能够帮助我们轻松处理各类时间需求,从而更有效地了解销售情况、评估业绩趋势和管理库存。本文将深入讨论不同类型的时间函数及其在产品销售数据分析中的应用,并结…

windows10|音视频剪辑|FFMPEG录屏和网络推流源初步的生成

前言: FFMPEG的功能强大是毋庸置疑的,那么录屏的需求大家在某些时候大家可能是非常需要的,例如,现有的项目需要演示,因此录制一段演示视频;亦或者做内容分发直播的,比如游戏主播,需…

人力资源智能化管理项目(day07:员工详情)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/humanResourceIntelligentManagementProject 页面结构和路由 <template><div class"dashboard-container"><div class"app-container"><div class"edit-form">…

使用python给程序添加授权码,设置授权时间、撤销授权和管理授权

文章目录 引言思路1思路2思路3客户端逻辑注册机逻辑服务器逻辑源码引言 有很多同学在开发程序的同时想要保护自己的源码不被他人窃取,这时候给程序添加授权就显得非常有必要了,下面主要分三块来讲述下如何开发,可以直接嵌入在你的程序中。 思路1 软件授权方案大概分成两个…

【实战】一、Jest 前端自动化测试框架基础入门(三) —— 前端要学的测试课 从Jest入门到TDD BDD双实战(三)

文章目录 一、Jest 前端自动化测试框架基础入门7.异步代码的测试方法8.Jest 中的钩子函数9.钩子函数的作用域 学习内容来源&#xff1a;Jest入门到TDD/BDD双实战_前端要学的测试课 相对原教程&#xff0c;我在学习开始时&#xff08;2023.08&#xff09;采用的是当前最新版本&a…

python 通过ssh增量同步文件夹

要通过 SSH 使用 Python 进行文件夹的增量同步&#xff0c;你可以使用 paramiko 库来创建 SSH 连接并执行文件传输操作。paramiko 是一个 Python 实现的 SSHv2 协议库&#xff0c;可以用于进行 SSH 连接、文件传输等任务。 以下是一个简单的示例&#xff0c;展示如何使用 para…