鸿蒙学习笔记(3)-像素单位、this指向问题、RelativeContainer布局、@Style装饰器和@Extend装饰器

一、像素单位

物理像素:用px表示。

逻辑像素:在布局的时候,底层针对物理像素和屏幕尺寸关系进行转化的中间层。

分辨率:代表在屏幕上到底布局了多少了像素点(发光点)

官方同时也提供了相关单位,在开发中使用官方提供的来实现。

名称描述
px屏幕物理像素单位。
vp

屏幕密度相关像素,根据屏幕像素密度转换为屏幕物理像素,当数值不带单位时,默认单位vp。

说明:

vp与px的比例与屏幕像素密度有关。

fp字体像素,与vp类似适用屏幕密度变化,随系统字体大小设置变化。
lpx视窗逻辑像素单位,lpx单位为实际屏幕宽度与逻辑宽度(通过designWidth配置)的比值,designWidth默认值为720。当designWidth为720时,在实际宽度为1440物理像素的屏幕上,1lpx为2px大小。

 二、this指向问题

(1)使用场景

面向对象开发的时候,会出现this的使用;在进行事件绑定的时候,也会涉及this调用指向;在箭头函数中我们也会用到this,准确判断他的指向。

(2)注意事项

1、this永远指向一个对象,即new出来的一个实例。

2、普通函数中的this,谁调用这个函数,默认this就指向谁。

3、箭头函数默认没有this指向,如果箭头函数中有this出现,一定指向父级作用域。

(3)总结

1、类模板中this默认占位符,如果你没有通过类来new一个对象,实际上类中的this就没有意义。

2、当你执行new操作符的时候,通过类模板创建出一个对象,类中的this代表new出来对象。

3、类中的函数和属性要相互调用,都必须通过this来进行调用。

4、事件函数中绑定了普通函数过后,内部的this默认指向事件源对象。

5、箭头函数谁使用了this,就指向谁,也就是父级作用域。

(4)改变this指向

call:可以传递多个参数,第一个表示当前this环境,第二个往后就是参数。call(this,1,2,3)

apply:可以传递两个参数,第一个当前this环境,第二个是参数数组。apply(this,[1,2,3])

bind:参数跟call一样,传递多个,但是返回一个函数。接收一个函数const fun=bind(this,1,2,3)  再调用一下 fun()

三、RelativeContainer布局

(1)概念

使得容器布局更加多样化,尤其涉及多个组件层叠,设计各个子组件之间的位置调整。

  • 容器内子组件区分水平方向,垂直方向:
    • 水平方向为left, middle, right,对应容器的HorizontalAlign.Start, HorizontalAlign.Center, HorizontalAlign.End。
    • 垂直方向为top, center, bottom,对应容器的VerticalAlign.Top, VerticalAlign.Center, VerticalAlign.Bottom。

注意理解:子组件相对于父容器位置变化时定位线的位置变化

(2)相对容器布局

1、相对父容器特性

1.1 在RelativeContainer容器中设置子元素,默认情况没有设置子元素的相对偏移,默认所有元素是层叠在一起的,对齐方式是容器左上角。

1.2 在RelativeContainer容器中,子元素可以设置偏移位置,难点:子元素可以以RelativeContainer父元素容器作为参考,当然也可以以其他子元素作为偏移参考。

anchor:参考锚点设置

.alignRules({

//可以给子组件设置一个属性,代表子元素设置相对位置,组要提供参考元素和子元素指定水平方向哪一边作为参考线,以及父级元素的参考线

.alignRules({

top: { anchor: "__container__", align: VerticalAlign.Top },//子组件顶部以container父容器作为参考,以父容器垂直方向顶部对齐

right: { anchor: "__container__", align: HorizontalAlign.End }//子组件右边以container父容器作为参考,以父容器水平方向右边对齐

})

ps:跟学过的相对定位有点类似,position:绝对定位,确定子组件相对父组件的位置(相对父组件)。

可以使用offset来设置子元素定位好以后的细节

.offset({

x:-10,y:10             //向左偏移,向下偏移10

})

2、相对子元素特性 

如果想要以子元素作为参考,需要给你的子组件设置一个id作为唯一标识,anchor锚点参考改为你想参考的子组件的唯一标识id,其余用法思路根父组件是一样的。

每次移动一个子元素时,参考的那个子元素要固定下来,如果参考的子元素的位置发生了变化,其他以它作为参考对象的子元素都会受到影响。

四、@Style装饰器

一、简介

在我们页面开发的过程中,将一个页面中重复的一些样式代码提取出来实现公用,并且只负责当前页面的样式复用,有组件内定义和组件外定义两种,组件外定义记得加fuction。

二、注意事项

1、不是所有的样式都有可以提取到@Style装饰器装饰器中,只可以抽取公共样式事件。

2、@Style不支持传参

3、可以在组件下继续添加一样的样式来覆盖掉@Style装饰器复用的样式。

五、@Extend装饰器

一、简介

定义扩展组建的样式,主要用于鸿蒙中原生组件的样式和事件进行扩展,换句话说,就是可以用这个装饰器对原生组件进行重定义,在页面实现复用,类似于@Style装饰器效果。

二、注意事项

1、必须指定对哪个原生组件进行拓展。

2、和@Styles不同,@Extend仅支持在全局定义,不支持在组件内部定义。

3、和@Styles不同,@Extend装饰的方法支持参数,开发者可以在调用时传递参数,调用遵循TS方法传值调用。

4、@Extend的参数可以为状态变量,当状态变量改变时,UI可以正常的被刷新渲染。

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

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

相关文章

0322-数据库与前后端的连接、数据库表的增删改查

前端 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>Insert title here</title> <script srcjs/jquery-3.7.1.min.js></script> <script> //jquaryajax发起请求 //传参形式不同 post用data{}…

matlab打开两个工程

1、问题描述 写代码时&#xff0c;需要实时参考别人的代码&#xff0c;需要同时打开2个模型&#xff0c;当模型在同一个工程内时&#xff0c;这是可以直接打开的&#xff0c;如图所示 2、解决方案 再打开一个MATLAB主窗口 这个时候就可以同时打开多个模型了 3、正确的打开方…

深度剖析HTTP协议—GET/PUT请求方法的使用-构造请求的方法

活动发起人小虚竹 想对你说&#xff1a; 这是一个以写作博客为目的的创作活动&#xff0c;旨在鼓励大学生博主们挖掘自己的创作潜能&#xff0c;展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴&#xff0c;那么&#xff0c;快来参加吧&#xff01…

SQL中体会多对多

我们可以根据学生与课程多对多关系的数据库模型&#xff0c;给出实际的表数据以及对应的查询结果示例&#xff0c;会用到JOINLEFT JOIN两种连接 1. 学生表&#xff08;students&#xff09; student_idstudent_name1张三2李四3王五 2. 课程表&#xff08;courses&#xff09…

【android】补充

3.3 常用布局 本节介绍常见的几种布局用法&#xff0c;包括在某个方向上顺序排列的线性布局&#xff0c;参照其他视图的位置相对排列的相对布局&#xff0c;像表格那样分行分列显示的网格布局&#xff0c;以及支持通过滑动操作拉出更多内容的滚动视图。 3.3.1 线性布局Linea…

uv:Rust 驱动的 Python 包管理新时代

在 Python 包管理工具层出不穷的今天&#xff0c;pip、pip-tools、poetry、conda 等各有千秋。而今天要介绍的 uv&#xff0c;则是一款由 Astral 团队推出、采用 Rust 编写的全新工具&#xff0c;目标直指成为 “Python 的 Cargo”。它不仅在性能上表现优异&#xff0c;而且在功…

package.json版本前缀

前言 执行 npm i 下载依赖后&#xff0c;element-plus出现bug&#xff08;单页面多个date-picker同时开启&#xff09;&#xff0c;这是 v2.9.0 的问题&#xff0c;但是项目 package.json 中版本如下&#xff1a; "element-plus": "^2.7.6",乍一看并不是…

CSS+JS 堆叠图片动态交互切换

结合DeepSeek提供的代码&#xff0c;终于实现了堆叠两张图片动态循环切换&#xff0c;以下是代码&#xff1a; 通过绝对定位放了两张图片 <div class"col-lg-5" style"z-index: 40; position: relative;"><img src"images/banner_1.png&quo…

SpringCould微服务架构之Docker(2)

Docker和虚拟机的差别&#xff1a; 虚拟机是在操作系统中模拟硬件设备&#xff0c;然后运行另外一个操作系统。

好用的Markdown阅读编辑器Typora破解记录

Typora破解 一、下载Typora二、安装Typora三、破解Typora &#x1f600; 记录一下Typora破解记录&#xff0c;怕不常用忘记咯&#xff0c;感觉自己现在的脑子就像我的肠子一样&#xff0c;刚装进去就么得了。。。&#x1f614; Typroa算是用起来很舒服的Markdown阅读器了吧&am…

UI前端与数字孪生:打造智慧城市的双引擎

hello宝子们...我们是艾斯视觉擅长ui设计和前端数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 随着信息技术的飞速发展&#xff0c;智慧城市的概念逐渐从理论走向实践。智慧城市旨在通过运用物联网…

“征服HTML引号恶魔:“完全解析手册”!!!(quot;表示双引号)

&#x1f6a8;&#x1f4e2; "征服HTML引号恶魔&#xff1a;“完全解析手册” &#x1f4e2;&#x1f6a8; &#x1f3af; 博客引言&#xff1a;当引号变成"恶魔" &#x1f631; 是否遇到过这种情况&#xff1a; 写HTML时满心欢喜输入<div title"他…

k8s高可用集群安装

一、安装负载均衡器 k8s负载均衡器 官方指南 1、准备三台机器 节点名称IPmaster-1192.168.1.11master-2192.168.1.12master-3192.168.1.13 2、在这三台机器分别安装haproxy和keepalived作为负载均衡器 # 安装haproxy sudo dnf install haproxy -y# 安装Keepalived sudo yum …

node.js笔记

1. Node.js基本概念 1.1 什么是Node.js Node.js是一个开源、跨平台的JavaScript运行环境&#xff0c;广泛应用于各类项目。它基于Google Chrome的V8 JavaScript引擎&#xff0c;性能卓越。 Node.js在单个进程中运行&#xff0c;利用异步I/O操作避免阻塞&#xff0c;能高效处…

关于在vscode中的Linux 0.11 应用程序项目的生成和运行

首先我们需要需要查看镜像文件 查看软盘镜像文件 floppyb.img 中的内容 在 VSCode 的“Terminal”菜单中选择“Run Build Task...”&#xff0c;会在 VSCode 的顶部中间位置弹出一个 可以执行的 Task 列表&#xff0c;选择其中的“打开 floppyb.img”后会使用 Floppy Editor …

【JavaScript 简明入门教程】为了Screeps服务的纯JS入门教程

0 前言 0-1 Screeps: World 众所不周知&#xff0c;​Screeps: World是一款面向编程爱好者的开源大型多人在线即时战略&#xff08;MMORTS&#xff09;沙盒游戏&#xff0c;其核心机制是通过编写JavaScript代码来控制游戏中的单位&#xff08;称为“Creep”&#xff09;&#…

【CSS文字渐变动画】

CSS文字渐变动画 HTML代码CSS代码效果图 HTML代码 <div class"title"><h1>今天是春分</h1><p>正是春天到来的日子&#xff0c;花都开了&#xff0c;小鸟也飞回来了&#xff0c;大山也绿了起来&#xff0c;空气也有点嫩嫩的气息了</p>…

【论文阅读】基于思维链提示的大语言模型软件漏洞发现与修复方法研究

这篇文章来自于 Chain-of-Thought Prompting of Large Language Models for Discovering and Fixing Software Vulnerabilities 摘要 软件安全漏洞在现代系统中呈现泛在化趋势&#xff0c;其引发的社会影响日益显著。尽管已有多种防御技术被提出&#xff0c;基于深度学习&…

SpringMVC_day02

一、SSM 整合 核心步骤 依赖管理 包含 SpringMVC、Spring JDBC、MyBatis、Druid 数据源、Jackson 等依赖。注意点&#xff1a;确保版本兼容性&#xff08;如 Spring 5.x 与 MyBatis 3.5.x&#xff09;。 配置类 SpringConfig&#xff1a;扫描 Service 层、启用事务管理、导入…