鸿蒙5.0开发进阶:JS组件-媒体查询

往期鸿蒙5.0全套实战文章必看:(文中附带全栈鸿蒙5.0学习资料)


媒体查询

说明

  • 从API version 8 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

  • media属性值默认为设备的真实尺寸大小、物理像素和真实的屏幕分辨率。

媒体查询(Media Query)应用十分广泛,开发者经常需要根据设备的大致类型或者特定的特征和设备参数(例如屏幕分辨率)来修改应用的样式。使用媒体查询针对设备和应用的属性信息,可以设计出相匹配的布局样式。

CSS语法规则

使用@media来引入查询语句,具体规则如下:

@media [media-type] [and|or] [(media-feature)] {
  CSS-Code;
}

@media screen and (round-screen: true) { … } : 当设备屏幕是圆形时条件成立

@media (max-height: 454) { … } :范围查询,CSS level 3 写法

说明

  • 不支持<=,>=,<,>操作符;
  • api 9开始才支持多重 () 嵌套使用;
  • media语句整体长度不能超过 512 个字符;
  • 单个media条件长度不能超过32个字符;

媒体类型

类型说明
screen按屏幕相关参数进行媒体查询。

媒体逻辑操作

媒体逻辑操作符:and、or9+用于构成媒体查询语句,详细解释说明如下表。

表1 媒体逻辑操作符

类型说明
and

将多个媒体特征(Media Feature)以“与”的方式连接成一个媒体查询,只有当所有媒体特征都为true,查询条件成立。另外,它还可以将媒体类型和媒体功能结合起来。

例如:screen and (device-type: liteWearable) and (max-height: 454) 表示当设备类型是智能穿戴同时应用的最大高度小于等于454个像素单位时成立。

or9+

将多个媒体特征以“或”的方式连接成一个媒体查询,如果存在结果为true的媒体特征,则查询条件成立。

例如:screen and (max-height: 454) or (round-screen:true)表示当应用高度小于等于454个像素单位或者设备屏幕是圆形时,条件成立。

媒体特征

类型说明
height应用页面显示区域的高度。
min-height应用页面显示区域的最小高度。
max-height应用页面显示区域的最大高度。
width应用页面显示区域的宽度。
min-width应用页面显示区域的最小宽度。
max-width应用页面显示区域的最大宽度。
aspect-ratio

应用页面显示区域的宽度与高度的比值。

例如:aspect-ratio: 1/2

min-aspect-ratio应用页面显示区域的宽度与高度的最小比值。
max-aspect-ratio应用页面显示区域的宽度与高度的最大比值。
round-screen屏幕类型,圆形屏幕为 true, 非圆形屏幕为 false。

通用媒体特征示例代码

多个.container中的所写的属性个数以及类型需要相同,若不相同会导致显示异常。

<!-- xxx.hml -->
<div>
  <div class="container">
    <text class="title">Hello World</text>
  </div>
</div>
/* xxx.css */
.container {
  width: 300px;
  height: 600px;
  background-color: #008000;
}
.title {
    font-size: 30px;
    text-align: center;
}
@media (device-type: smartVision) {
  .container {
    width: 500px;
    height: 500px;
    background-color: #fa8072;
  }
} 
@media (device-type: liteWearable) {
  .container {
    width: 300px;
    height: 300px;
    background-color: #008b8b;
  }
} 

HarmonyOS 5.0ArkTS 组件中,设置触摸热区(Touch Area)属性可以通过组件的 `touchable` 和 `hitTestBehavior` 等属性来实现。这些属性允许开发者定义组件响应触摸事件的区域和行为。 ### 配置触摸热区属性 #### 1. `touchable` 属性 `touchable` 属性用于控制组件是否可以响应触摸事件。设置为 `true` 时,组件将可以响应触摸事件;设置为 `false` 时,组件将忽略所有触摸事件。 ```ts @Component struct MyComponent { build() { Column() { Text('Click Me') .fontSize(30) .touchable(true) } .width('100%') .height(100) } } ``` #### 2. `hitTestBehavior` 属性 `hitTestBehavior` 属性用于定义组件在命中测试(Hit Test)中的行为。它有以下几种取值: - `HitTestBehavior.self`: 组件仅在其自身的区域内响应触摸事件。 - `HitTestBehavior.none`: 组件不响应任何触摸事件。 - `HitTestBehavior.default`: 组件按照默认行为响应触摸事件。 ```ts @Component struct MyComponent { build() { Column() { Text('Click Me') .fontSize(30) .hitTestBehavior(HitTestBehavior.self) } .width('100%') .height(100) } } ``` #### 3. 自定义触摸热区 如果需要更复杂的触摸热区配置,可以通过自定义组件的 `onTouch` 事件来实现。通过监听触摸事件,开发者可以自定义组件的响应逻辑。 ```ts @Component struct MyComponent { @State message: string = 'Touch Me' build() { Column() { Text(this.message) .fontSize(30) .onTouch((event: TouchEvent) => { if (event.type === TouchType.Down) { this.message = 'Touched Down' } else if (event.type === TouchType.Up) { this.message = 'Touched Up' } }) } .width('100%') .height(100) } } ``` ### 注意事项 - **性能优化**:在设置触摸热区时,应避免不必要的复杂逻辑,以确保应用的响应速度和性能。 - **交互设计**:触摸热区的设计应符合用户习惯,避免过于敏感或响应区域过小的问题。 通过以上方法,开发者可以灵活地配置 ArkTS 组件的触摸热区属性,以满足不同的交互需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值