HarmonyOS 开发-多模态页面转场动效实现案例

介绍

本示例介绍多模态页面转场动效实现:通过半模态转场实现半模态登录界面,通过配置NavDestinationMode类型为DIALOG,实现半模态的背景为透明,再与全屏模态和组件转场结合实现多模态组合登录场景,其中手机验证码登录与账号密码登录都为组件,通过TransitionEffect.asymmetric()和TransitionEffect.move()实现组件间转场达到近似页面转场的效果。

效果图预览

使用说明

登录方式有两种,验证码登录和账号密码登录

  1. 点击主页"多模态页面转场动效实现案例",跳转半模态登录页面。
  2. 在半模态窗口中选中同意协议键,并点击获取验证码按钮,跳转至手机验证码登录页面。
  3. 通过点击手机验证码登录页面中的"账号密码登录",向右切换跳转至账号密码登录页面。
  4. 通过点击账号密码登录页面中的"手机验证码登录",向左切换跳转至手机验证码登录页面。

实现思路

场景:半模态转场至验证码登录,验证码登录和账户登录可以相互切换

登录方式有两种,验证码登录和账户,需要在一个全屏模态窗口CaptureLogin中切换,使用if进行条件渲染。

1、通过配置NavDestinationMode类型为 DIALOG ,实现半模态的背景为透明的效果。

import { RouterInfo } from '@ohos/dynamicsRouter/Index';
pageMap(name: string, param: ESObject) {NavDestination() {}// 按需将NavDestinationMode配置为DIALOG类型,此时背景默认透明.mode(name === RouterInfo.MULTI_MODAL_TRANSITION.moduleName + "/" + RouterInfo.MULTI_MODAL_TRANSITION.pageName ?NavDestinationMode.DIALOG : NavDestinationMode.STANDARD)
}

2、通过bindSheet属性为主页无样式的Text绑定半模态页面,再通过bindContentCover属性为主页无样式的Text绑定全屏模态页面。

Text()/*** TODO: 知识点: 通过bindSheet属性为组件绑定半模态页面,由于半模态必须绑定组件,* 此处绑定无样式的Text组件作为开屏半模态展示。* isPresent:是否显示半模态页面*/.bindSheet($$this.isPresent, this.halfModalLogin(), { // Text绑定半模态转场height: this.sheetHeight, // 半模态高度dragBar: this.showDragBar, // 是否显示控制条backgroundColor: $r('app.color.btn_bgc'),showClose: true, // 是否显示关闭图标shouldDismiss: ((sheetDismiss: SheetDismiss) => { // 半模态页面交互式关闭回调函数sheetDismiss.dismiss();this.pageStack.pop();})
})Text()/*** TODO: 知识点: 通过bindContentCover属性为组件绑定全屏模态页面,由于全屏模态必须绑定组件,* 此处绑定无样式的Text组件作为手机验证码组件和账号密码组件的全屏模态展示。* isPresentInLoginView:是否显示全屏模态页面*/.bindContentCover($$this.isPresentInLoginView, this.defaultLogin())

3、在半模态页面中的验证码登录按钮点击时打开全屏模态转场,并将对应的组件入场动效置为空,此时进场只保留全屏模态入场动效。

@Builder
halfModalLogin() { // 半模态窗口页面Button("验证码登录").onClick(() => {if (this.isConfirmed) { // 判断是否同意协议// 半模态页面中跳转全屏模态登录页this.isPresentInLoginView = true;// 用于标识转场类型,从半模态跳转至手机验证码组件时为false,从账号密码组件跳转至手机验证码组件时为truethis.isShowTransition = false;}})
}

4、通过点击第二步中的按钮跳转到全屏模态组件(CaptureLogin),并通过isDefaultLogin控制两种登录组件的条件渲染:true(手机验证码登录),false(二维码登录),同时通过TransitionEffect.asymmetric()和TransitionEffect.move()实现组件间转场,
从而实现组件转场类似页面转场的效果。

// 1.1、定义验证码登录页的转场效果1:用于定义半模态转场到此组件的进场动效和组件间后续切换的转场动效,进场时无动效,转场时从左边推出,
private effect1: TransitionEffect =TransitionEffect.asymmetric(TransitionEffect.IDENTITY,TransitionEffect.move(TransitionEdge.START).animation({ duration: EFFECT_DURATION, curve: Curve.Linear }))
// 1.2、定义验证码登录页的转场效果2:用于后面组件切换到此组件时转场的动效,从左边推出。
private effect3: TransitionEffect =TransitionEffect.move(TransitionEdge.START).animation({ duration: EFFECT_DURATION, curve: Curve.Linear })build() {Stack({ alignContent: Alignment.TopStart }) {if (this.isDefaultLogin) {CaptchaLogin() // 手机验证码登录/* 验证码登录组件绑定转场* TODO: 知识点: 当isShowTransition为false,此时从半模态进入手机验证码组件:此时关闭组件进场动效,开启全模态进场动效,* 当isShowTransition为true,此时从账号密码组件返回此组件:打开组件进场动效,此时左滑进入手机验证码组件。*/.transition(this.isShowTransition ? this.effect3 : this.effect1)} else {AccountLogin() // 账号密码登录.transition(TransitionEffect.move(TransitionEdge.END).animation({duration: EffectDuration,curve: Curve.Linear})) // 从右边推出}}
}

工程结构&模块类型

multimodaltransition                            // har类型
|---src/main/ets/view
|   |---HalfModalWindow.ets                     // 视图层-主页
|---src/main/ets/model
|   |---AccountLogin.ets                        // 模型层-账号密码登录页 
|   |---CaptchaLogin.ets                        // 模型层-验证码登录页(全屏模态窗口) 

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

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

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

相关文章

从零开始为香橙派orangepi zero 3移植主线linux——2.kernel + rootfs

从零开始为香橙派orangepi zero 3移植主线linux——2.kernel rootfs 参考文章:一、linux kernel移植二、根文件系统2.1 buildroot构建1.修改toolchain下的交叉编译链2.修改系统配置3.去除内置kernel和uboot编译4.添加rootfs.tar格式的输出 2.2 ubuntu-base移植 三、…

Linux gcc day4 权限

首先来看比如ls、pwd等究竟是什么呢? 那ls是如何在shell中执行起来的呢?shell命令又是什么呢? shell命令:命令行解释器:表现:你看到的命令行提示符,以及可以输入指令并且可以执行(是…

贪心算法简介

目录 一、什么是贪心算法? 二、贪心算法的特点 三、贪心算法解决找零问题、最短路径问题、背包问题 1.找零问题 2.最短路径问题 3.背包问题 一、什么是贪心算法? 贪心算法就是希望通过局部最优来解决全局最优 基本步骤:1.将问题分为若…

【I/O】Unix IO 介绍

IO 模型(一) Unix IO 一个输入操作共包含两个阶段: 等待数据准备好从内核将数据复制到进程 对于一个套接字上的输入操作,通常第一步是等待数据从网络中到达,当数据到达时,先将数据复制到内核缓冲区中&a…

【UE 委托】如何利用函数指针理解委托的基本原理

目录 0 引言1 函数指针模拟多播委托 🙋‍♂️ 作者:海码007📜 专栏:UE虚幻引擎专栏💥 标题:【UE 委托】如何利用函数指针理解委托的基本原理❣️ 寄语:书到用时方恨少,事非经过不知难…

js base64 img 转 file

打印canvas图像的dataurl const imgDataUrl canvas.toDataURL();console.log(imgDataUrl)上传的图像编码 1,把base64编码转为文件对象第一个参数dataUrl是一个base64的字符串。第二个参数是文件名可以随意命名funtion base64toFile(dataurl, filename file) {let arr datau…

Git 安装和配置

下载 Git 网址: https://git-scm.com/download 安装 Git 双击安装包, 开始安装. 修改安装路径, 选择非中文无空格路径: 开始安装: 安装成功: 配置 Git 安装完成后, 在任意文件夹内, 右键, 可以显示两个 Git 选项, 就说明安装成功了.

汇舟问卷:海外问卷调查适合哪些人群去参与?

大家好,我是汇舟问卷。关于海外问卷调查这个项目最近一直备受关注,那么这个项目究竟有哪些人群适合参与进来呢?我们一起来看看。 第一,海外问卷调查适合一些没有找到工作或者拥有充足业余时间的人。只要您拥有一台电脑和网络连接…

IDEA 解决 java: 找不到符号 符号: 类 __ (使用了lombok的注解)

原因IDEA版本太高,在 ProcessingEnvironement 预编译的时候是以代理的方式来执行的,不再是直接 javac方式, lombok依赖的 javac方式的 annotation processors 不再生效了 解决办法:下面这一句,加在下图中 -Djps.track.ap.depen…

关于帆软报表取OA选择框-下拉列表值的解决方案

问题:制度一览表每次在OA端增加或修改制度类别后,都要在帆软报表修改后才能正确显示。 原因分析:以前大家没有找到OA下拉列表的维护表,采用的是在帆软端通过内置数据集来解决,需要人工维护。 解决方案: …

Linux函数学习 epoll

1、Linux epoll函数 1.1、创建epoll实例 int epoll_create1(int flag); 返回值:-1 失败,非负数 成功 flag :默认传入0 1.2、管理epoll对象 int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); epfd :e…

rebase和merge的区别

合并分支用rebase还是merge? 实际开发工作的时候,我们都是在自己的分支开发,然后将自己的分合并到主分支,那合并分支用2种操作,这2种操作有什么区别呢? git上新建一个项目,默认是有master分支…

蓝桥杯物联网竞赛_STM32L071KBU6_我的全部省赛及历年模拟赛源码

我写的省赛及历年模拟赛代码 链接:https://pan.baidu.com/s/1A0N_VUl2YfrTX96g3E8TfQ?pwd9k6o 提取码:9k6o

YOLOv8模型剪枝实战:DepGraph(依赖图)方法

课程链接:YOLOv8模型剪枝实战:DepGraph(依赖图)方法_在线视频教程-CSDN程序员研修院 YOLOv8是一个当前非常流行的目标检测器,本课程使用DepGraph(依赖图)剪枝方法对YOLOv8进行网络剪枝,使其更加轻量和实用…

Android源码笔记-输入事件(二)

这一节主要了解输入事件的获取,InputReaderThread继承自C的Thread类,Thread类封装了pthread线程工具,提供了与Java层Thread类相似的API。C的Thread类提供了一个名为threadLoop()的纯虚函数,当线程开始运行后,将会在内建…

Tubi 十岁啦!

Tubi 今年十岁了,这十年不可思议,充满奇迹! 从硅谷一个名不见经传的创业小作坊,转变成为四分之一美国电视家庭提供免费流媒体服务的北美领先的平台; 从费尽心力终于签下第一笔内容合作协议,到现在与 450 …

3岁以下幼儿玩具电脑电子方案

幼儿玩具电脑是一种专为儿童设计的电子教育产品,它通过提供多样化的学习内容和互动方式,旨在促进孩子的早期教育和发展。具体作用如下: 培养学习兴趣:早教机通常设计有丰富的教育资源和有趣的互动游戏,能够激发孩子对…

Mongodb快速入门

一、概述 1.1介绍 MongoDB是一个基于分布式文件存储的数据库。由C语言编写。旨在为WEB应用提供可扩展高性能数据存储解决方案。(并不是单纯的内存数据库),官方地址 https://www.mongodb.com/ 操作语法与 JavaScript 类似,容易上手,学习成本低…

linux离线安装redis

一、下载linux版本压缩包 地址:Download | Redis 为了安全稳定性,下载 6.2 版本,不下载最新版 二、上传到linux服务器 笔者上传到 /opt/redis下 ,使用Xftp和Xshell工具,使用root权限 cd /opt sudo mkdir redis cd r…

【Qt踩坑】ARM 编译Qt5.14.2源码-QtWebEngine

1.下载源码 下载网站:Index of /new_archive/qt/5.14/5.14.2/single 2.QWebEngine相关依赖 sudo apt-get install flex libicu-dev libxslt-dev sudo apt-get install libssl-dev libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev sudo apt-get …