鸿蒙进阶篇-模态转场

hello大家好,这里是鸿蒙开天组,今天让我们来学习鸿蒙进阶篇-模态转场

模态转场

今天来学习模态转场,就是页面中弹出,全屏&半屏的弹框:

就像这样,模态转场主要分为半模态和全屏模态,上面的就是一个半模态。

半模态转场

核心用法

半模态顾名思义,就是半屏的模态效果(图 2)

名称

参数

参数描述

bindSheet

isShow: boolean,

builder: CustomBuilder,

options?: SheetOptions

给组件绑定半模态页面,点击后显示模态页面。

isShow: 是否显示半模态页面。

从API version 10开始,该参数支持$$双向绑定变量

builder: 配置半模态页面内容。

options: 配置半模态页面的可选属性。

核心步骤:

  1. 定义状态变量,boolean
  2. 通过 Builder 定义结构
  3. 绑定半模态 bindSheet
  4. 修改状态变量,控制显示

看起来并不复杂,让我们用一个案例来实现


@Entry
@Component
struct Page01_bindSheet {// 1. 定义状态变量,boolean@State isShow: boolean = falsebuild() {Column() {Text('半模态转场').fontSize(20).fontWeight(FontWeight.Bold)Button('显示半模态')// 3. 绑定半模态 bindSheet.bindSheet(this.isShow, this.sheetBuilder()).onClick(() => {// 4. 修改状态变量,控制显示this.isShow = true})}.width('100%').height('100%').padding(20)}// 2.通过 Builder 定义结构@BuildersheetBuilder() {Column() {}.backgroundColor(Color.Pink).width('100%').height('100%')}
}

这样我们就实现了一个简单的半模态。

好的,今天的文章就到这了......什么?运行出bug了??

让我们看一下原因

原来是这里出了问题,原因在于,当我们点击这个按钮关闭半模态时,我们的isShow参数的值并没有得到改变。

说明

  • 在非双向绑定情况下,以拖拽方式关闭半模态页面不会改变isShow参数的值。
  • 为了使isShow参数值与半模态界面的状态同步,建议使用$$双向绑定isShow参数。

好的,解决方案也有了,接下来我们修改代码

// 其余代码略
.bindSheet($$this.isShow, this.sheetBuilder())

非常的简单,让我无法继续水字数...我们继续

名称

参数

参数描述

bindSheet

isShow: boolean,

builder: CustomBuilder,

options?: SheetOptions

给组件绑定半模态页面,点击后显示模态页面。

isShow: 是否显示半模态页面。

从API version 10开始,该参数支持$$双向绑定变量

builder: 配置半模态页面内容。

options: 配置半模态页面的可选属性。

这里有个小建议,$$双向绑定符号最后添加,先添加会导致我们写代码时没有提示,非常的痛苦。

注意:

  • 有不少组件也支持双向绑定的组件,也可以使用语法$$进行进行绑定
  • 当然这都是后话 =)

可选属性sheetOptions

通过第三个可选参数SheetOptions,可以对半模态的内容进行调整

其中常用属性已经标红

名称

类型

必填

描述

height

SheetSize

| Length

半模态高度,默认是LARGE。

说明:

底部弹窗竖屏时,当设置detents时,该属性设置无效。

dragBar

boolean

是否显示控制条,默认显示。

说明:

半模态面板的dentents属性设置多个不同高度并且设置生效时,默认显示控制条。否则不显示控制条。

showClose

boolean | Resource

是否显示关闭图标,默认显示。

detents

[(SheetSize | Length), ( SheetSize | Length)?, (SheetSize | Length)?]

半模态页面的切换高度档位。

说明:

底部弹窗竖屏生效,元组中第一个高度为初始高度。

。。。。剩余属性参考文档

看文档真是累死了,所以让我们打代码吧!

来个实践:

  • 效果 1:弹出半模态,高度固定
  • 效果 2:弹出半模态,通过控制条切换高度档位

基础代码:

@Entry
@Component
struct Page02_bindSheetOptions {// isShow1 和 isShow2 分别控制不同的半模态@State isShow1: boolean = false@State isShow2: boolean = falsebuild() {Column({ space: 20 }) {Text('半模态转场-常用属性' + this.isShow1).fontSize(20).fontWeight(FontWeight.Bold)Button('显示半模态1-高度固定')// 3. 绑定半模态 bindSheet.bindSheet($$this.isShow1, this.sheetBuilder1()).onClick(() => {// 4. 修改状态变量,控制显示this.isShow1 = true})Button('显示半模态 2-切换高度档位').bindSheet($$this.isShow2, this.sheetBuilder2()).onClick(() => {this.isShow2 = true})}.width('100%').height('100%').padding(20)}@BuildersheetBuilder1() {Column() {Text('半模态 1').fontSize(40)}.backgroundColor(Color.Pink).width('100%').height('100%')}@BuildersheetBuilder2() {Column() {Text('半模态 2').fontSize(40)}.backgroundColor(Color.Orange).width('100%').height('100%')}
}

接下来给你们一点时间......300,299,298...0!时间到,揭晓答案!

@Entry
@Component
struct Page02_bindSheetOptions {// isShow1 和 isShow2 分别控制不同的半模态@State isShow1: boolean = false@State isShow2: boolean = falsebuild() {Column({ space: 20 }) {Text('半模态转场-常用属性' + this.isShow1).fontSize(20).fontWeight(FontWeight.Bold)Button('显示半模态1-高度固定')// 3. 绑定半模态 bindSheet.bindSheet($$this.isShow1, this.sheetBuilder1(), {// height: SheetSize.MEDIUM// 枚举的方式设置height: 100// 设置具体的值}).onClick(() => {// 4. 修改状态变量,控制显示this.isShow1 = true})Button('显示半模态 2-切换高度档位').bindSheet($$this.isShow2, this.sheetBuilder2(), {dragBar: true, // 是否显示控制条detents: [100, 200, 300] // 在多个不同的高度切换}).onClick(() => {this.isShow2 = true})}.width('100%').height('100%').padding(20)}@BuildersheetBuilder1() {Column() {Text('半模态 1').fontSize(40)}.backgroundColor(Color.Pink).width('100%').height('100%')}@BuildersheetBuilder2() {Column() {Text('半模态 2').fontSize(40)}.backgroundColor(Color.Orange).width('100%').height('100%')}
}

接下来我们学习全屏模块

全屏模块

名称

参数

参数描述

bindContentCover

isShow: boolean,

builder: CustomBuilder,

options?: ContentCoverOptions

给组件绑定全屏模态页面,点击后显示模态页面。模态页面内容自定义,显示方式可设置无动画过渡,上下切换过渡以及透明渐变过渡方式。

isShow: 是否显示全屏模态页面。

从API version 10开始,该参数支持$$双向绑定变量

builder: 配置全屏模态页面内容。

options: 配置全屏模态页面的可选属性(详细可以参考文档,用的不多)

核心步骤:

  1. 定义状态变量,boolean
  2. 通过 Builder 定义结构
  3. 绑定全屏模态 bindContentCover
  4. 修改状态变量,控制显示

来一个简单实现开开胃

@Entry
@Component
struct Page05_bindContentCover {// 1. 定义状态变量,boolean@State isShow: boolean = false// 2.通过 Builder 定义结构@BuildermyBuilder() {Column() {Button('关闭').onClick(() => {this.isShow = false})}.width('100%').height('100%').backgroundColor('#0094ff').justifyContent(FlexAlign.Center)}build() {Column() {Button(`显示全屏模态${this.isShow}`).fontSize(20).margin(10)// 绑定全屏模态 bindContentCover.bindContentCover(this.isShow, this.myBuilder()).onClick(() => {// 修改状态变量,控制显示this.isShow = true})}.justifyContent(FlexAlign.Center).width('100%').height('100%')}
}

非常有趣,今天我们就学习到这里,喜欢的可以点点关注!!这里是鸿蒙开天组,我们下一篇文章不见不散!

以上内容仅供学习交流,如有违法或者侵权可以联系删除。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

RGA DEMO 下部

#加载llm模型通过ollama最好别用ollama我是没经济条件 from langchain_community.llms import Ollama llm Ollama(model"qwen1_5-4b-chat-q2_k")#pip install langchain_ollama -i https://pypi.tuna.tsinghua.edu.cn/simple #OllamaEmbeddings 要写地址本地也要写&…

Faces in Things数据集: 由麻省理工学院、微软等联合发布,探索人类视觉错觉的新里程碑

2024-09-24,由麻省理工学院、微软、丰田研究院、NVIDIA联合发布的 Faces in Things,为我们打开了研究人类视觉错觉——尤其是面部错觉(Pareidolia)的新篇章。专注于人类视觉系统如何在各种随机刺激中检测到类似面孔的结构&#xf…

知识见闻 - Workday公司介绍

人力资源“一哥”Workday的前世今生 01 Duffield 既然要聊Workday,我们首先要认识一个人。David Duffield,又一位企业软件服务行业的绝对大神。 大卫杜菲尔德(David Duffield)出生于1941年。 40岁,很多职场人都已经认命…

宁德时代嵌入式面试题及参考答案(万字长文)

vector 和 list 的主要区别是什么? 向量(vector)和链表(list)是 C 中两种常用的容器。 从底层数据结构来讲,vector 是基于连续的内存存储的动态数组。这使得它可以通过索引快速访问元素,时间复杂…

设计模式08-行为型模式1(命令模式/迭代器模式/观察者模式/Java)

五、行为型模式 **行为模式的定义:**行为型模式是对不同的对象之间划分职责和算法的抽象化。行为型模式定义了系统中对象之间的交互与通信,研究系统在运行时对象之间的相互通信与协作,进一步明确对象的职责,包括对系统中较为复杂的…

【设计模式】结构型模式(二):代理模式

结构型模式(二):代理模式 3.代理模式(Proxy)3.1 主要特点3.2 组成部分3.3 示例代码3.3.1 Subject 接口3.3.2 RealSubject 实际对象3.3.3 Proxy 代理对象3.3.4 客户端代码3.3.5 运行结果 3.4 总结 3.代理模式&#xff0…

第二十八章 Vue之自定义指令

目录 一、引言 二、自定义指令的注册和使用方式 2.1. 自定义指令-全局注册使用 2.2. 自定义指令-局部注册使用 三、自定义指令完整代码 3.1. 自定义指令全局注册/使用 3.1.1. main.js 3.1.2. App.vue 3.2. 自定义指令局部注册/使用 3.2.1. main.js 3.2.2. App.vue …

Charles简单压力测试

1.接口请求次数,并发量,请求延迟时间均可配置 1.1选中需要进行测试的接口,鼠标右键选中【repeat advance】 2.设置并发参数 下面的图中,选择了1个接口,每次迭代中1个接口同时请求,迭代1000次(…

【uniapp3】分享一个自己写的h5日历组件

简言 分享一下自己基于uniapp写的日历组件。如果不太满足你的需求,可以自己改造。 日历 实现分析: 页面显示 - 分为顶部显示和日历显示,我这里做了多行和单行显示两种情况,主要是当时看着手机的日历做的,手机上的…

Java设计模式(代理模式整理中ing)

一、代理模式 1、代理模式定义: 代理模式:由于某些原因要给某对象提供一个代理以控制对该对象的访问,这时访问对象不适合或者不能够直接引用目标对象,代理对象作为访问对象与目标对象之间的中介进行连接调控调用。 2、代理模式的…

Thumb 汇编指令集,Thumb 指令编码方式,编译 Thumb 汇编代码

版权归作者所有,如有转发,请注明文章出处:https://cyrus-studio.github.io/blog/ Thumb指令集 ARM 指令集:最早在 1985 年随第一代 ARM 处理器问世。ARM 指令集一开始是 32 位固定长度的指令,用于各种计算任务。 Thu…

Leetcode - 周赛421

目录 一,3334. 数组的最大因子得分 二,3335. 字符串转换后的长度 I 三,3336. 最大公约数相等的子序列数量 四,3337. 字符串转换后的长度 II 一,3334. 数组的最大因子得分 暴力方法就不演示,这里介绍一个…

文件管理工具的按路径名称归类功能大公开,将大量文件批量复制或移动到指定路径,办公软件达人的秘密武器

是否还在为成堆的文件归类而苦恼?想要一键就能将海量文件按路径名称轻松归类,无论是复制还是移动?别急,今天就让文件批量改名高手软件的按路径名称归类功能来拯救你的文件管理世界!让我们一起告别繁琐,迎接…

建设NFS服务器并实现文件共享

关闭防火墙和s0 systemctl stop firewalld setenforce 0 安装NFS yum install nfs-utils -y 新建共享目录并设置权限 echo "hello" > /nfs/shared/test1 chmod -Rf 777 /nfs/shared/ 配置服务端的NFS配置文件 vim /etc/exports /nfs/shared *(ro) 启动…

曹操出行借助 ApsaraMQ for Kafka Serverless 提升效率,成本节省超 20%

本文整理于 2024 年云栖大会主题演讲《云消息队列 ApsaraMQ Serverless 演进》,杭州优行科技有限公司消息中间件负责人王智洋分享 ApsaraMQ for Kafka Serverless 助力曹操出行实现成本优化和效率提升的实践经验。 曹操出行:科技驱动共享出行未来 曹操…

(转载)Tools for Learning LLVM TableGen

前提 最近在学习有关llvm的东西,其中TableGen占了一部分,所以想特意学习下TableGen相关的语法。这里找到了LLVM官网的一篇介绍TableGen的博客,学习并使用机器翻译为中文。在文章的最后也添加了一些学习TableGen的资源。 原文地址&#xff1…

vue3uniapp实现自定义拱形底部导航栏,解决首次闪烁问题

前言: 我最初在网上翻阅查找了很多方法,发现大家都是说在page.json中tabbar中添加:"custom": true,即可解决首次闪烁的问题,可是添加了我这边还是会闪烁,因此我这边改变了思路,使用了虚拟页面来解…

【P2-5】ESP8266 WIFI模块在AP模式下作为TCP服务器与多个电脑/手机网络助手(TCP客户端)通信——TCP数据透传

前言:完成ESP8266 WIFI模块在AP模式下作为TCP服务器与多个电脑/手机网络助手(TCP客户端)通信——实现TCP数据透传 AP模式,通俗来说模块可以发出一个WIFI热点提供给电脑/手机连接。 TCP服务端,通俗来说就是模块/单片机作为服务器,可以接收多个客户通道的连接。 本…

Kali Linux 新工具推荐: Sploitscan

在 2024.2 版本 Kali Linux 增加了一个新攻击工具: Sploitscan 1.简介: Sploitscan 能够发现操作系统和应用程序中的安全漏洞。 2.特点: 简单的命令行界面 扫描多个操作系统和应用程序 检测多种漏洞 提供详细信息 可定制性强 3.示例: 2024.2 及以后的版本 Kali Linux…

11.Three.js使用indexeddb前端缓存模型优化前端加载效率

11.Three.js使用indexeddb前端缓存模型优化前端加载效率 1.简述 在使用Three.js做数字孪生应用场景时,我们常常需要用到大量模型或数据。在访问我们的数字孪生应用时,每次刷新都需要从web端进行请求大量的模型数据或其他渲染数据等等,会极大…