创客贴设计网站官网,铁岭网站建设公司,淘宝店铺不允许发布网站建设了,软件开发商是什么意思介绍
本示例主要介绍在点击事件中#xff0c;子组件enabled属性设置为false的时候#xff0c;如何解决点击子组件模块区域会触发父组件的点击事件问题#xff1b;以及触摸事件中当子组件触发触摸事件的时候#xff0c;父组件如果设置触摸事件的话#xff0c;如何解决父组…介绍
本示例主要介绍在点击事件中子组件enabled属性设置为false的时候如何解决点击子组件模块区域会触发父组件的点击事件问题以及触摸事件中当子组件触发触摸事件的时候父组件如果设置触摸事件的话如何解决父组件也会被触发的问题。
效果图预览 使用说明
开启使能开关在点击事件场景下点击子组件不能触发本身和父组件的点击事件。在触摸事件场景下触摸子组件能够触发子组件的触摸事件不会触发父组件的触摸事件。关闭使能开关在点击事件场景下点击子组件不触发子组件点击事件但能够触发父组件点击事件。在触摸事件场景下触摸子组件触发子组件的触摸事件和父组件的触摸事件。
实现思路
场景1enabled的值为false时点击Button按钮会导致父组件的点击事件触发
对Button组件包裹一层容器组件并设置hitTestBehavior属性 属性值设置为HitTestMode.Block可阻止事件的冒泡。具体代码可参考EventPropagation.ets。
Component
struct ClickEvent {// 初始化控制使能开关变量Consume isEnabled: boolean;// 父组件响应次数State parentCompResponseTimes: number 0;build() {Column() {Text($r(app.string.click_event_title)).fontSize($r(app.integer.describe_text_font_size)).width(100%).margin($r(app.integer.common_space_size)).textAlign(TextAlign.Start)Column() {Text($r(app.string.parent_component_text)).fontSize($r(app.integer.parent_component_text_font_size)).margin($r(app.integer.common_space_size))// 父组件响应次数Row() {Text($r(app.string.parent_component_response_times_text)).fontSize($r(app.integer.response_text_font_size))Text(${this.parentCompResponseTimes}).fontSize($r(app.integer.response_text_font_size))}.margin({ top: $r(app.integer.common_space_size), bottom: $r(app.integer.common_space_size) })Column() {Button(this.isEnabled ? $r(app.string.child_component_no_response) : $r(app.string.child_component_response)).enabled(false).fontSize($r(app.integer.child_component_font_size)).height($r(app.integer.button_height_size)).onClick(() {})}/*TODO知识点在onClick事件里需要将Button按钮包裹一层容器组件在此容器组件通过使用hitTestBehavior来阻止事件冒泡(子组件向父组件透传onClick事件)hitTestBehavior的属性值设置为HitTestMode.Block。*/.hitTestBehavior(this.isEnabled ? HitTestMode.Block : HitTestMode.Default)}.width($r(app.string.common_container_width)).height($r(app.integer.button_click_event_area_height)).backgroundColor($r(app.color.click_event_area_background_color)).alignItems(HorizontalAlign.Center).onClick(() {// 冒泡事件发生时该回调不会触发this.parentCompResponseTimes;})}}
}场景2触摸事件中当子组件触发触摸事件的时候父组件如果设置触摸事件的话也会触发
在onTouch函数中执行event.stopPropagation()可阻止冒泡。具体代码可参考EventPropagation.ets
Component
struct TouchEvent {// 初始化控制使能开关变量Consume isEnabled: boolean;// 父组件响应次数State parentCompResponseTimes: number 0;// 子组件响应次数State childCompResponseTimes: number 0;build() {Column() {Text($r(app.string.touch_event_title)).fontSize($r(app.integer.describe_text_font_size)).width(100%).margin($r(app.integer.common_space_size)).textAlign(TextAlign.Start)Column() {Text($r(app.string.parent_component_text_touch)).fontSize($r(app.integer.parent_component_text_font_size)).margin($r(app.integer.common_space_size))// 父组件响应次数Row() {Text($r(app.string.parent_component_response_times_text)).fontSize($r(app.integer.response_text_font_size))Text(${this.parentCompResponseTimes}).fontSize($r(app.integer.response_text_font_size))}.margin({ top: $r(app.integer.common_space_size), bottom: $r(app.integer.common_space_size) })// 子组件响应次数Row() {Text($r(app.string.child_component_response_times_text)).fontSize($r(app.integer.response_text_font_size))Text(${this.childCompResponseTimes}).fontSize($r(app.integer.response_text_font_size))}.margin({ bottom: $r(app.integer.common_space_size) })Text(this.isEnabled ? $r(app.string.child_touch_component_no_response) : $r(app.string.child_touch_component_response)).height($r(app.integer.button_height_size)).textAlign(TextAlign.Center).backgroundColor(Color.White).padding($r(app.integer.common_space_size)).onTouch((event) {if (this.isEnabled) {event.stopPropagation(); // TODO知识点在onTouch事件里通过调用event.stopPropagation()阻止事件冒泡(子组件向父组件透传Touch事件)}this.childCompResponseTimes;})}.width($r(app.string.common_container_width)).height($r(app.integer.button_click_event_area_height)).backgroundColor($r(app.color.click_event_area_background_color)).margin($r(app.integer.common_space_size)).alignItems(HorizontalAlign.Center).onTouch(() {// 冒泡事件发生时该回调不会触发this.parentCompResponseTimes;})}}
}高性能知识点
不涉及。
工程结构模块类型
eventpropagation // har类型
|---view
| |---EventPropagationView.ets // 视图层-阻塞冒泡特性页面相关学习参考视频https://www.bilibili.com/video/BV1n1421o7xi
为了能让大家更好的学习鸿蒙HarmonyOS NEXT开发技术这边特意整理了《鸿蒙开发学习手册》共计890页希望对大家有所帮助https://qr21.cn/FV7h05
《鸿蒙开发学习手册》
如何快速入门https://qr21.cn/FV7h05
基本概念构建第一个ArkTS应用…… 开发基础知识https://qr21.cn/FV7h05
应用基础知识配置文件应用数据管理应用安全管理应用隐私保护三方应用调用管控机制资源分类与访问学习ArkTS语言…… 基于ArkTS 开发https://qr21.cn/FV7h05
Ability开发UI开发公共事件与通知窗口管理媒体安全网络与链接电话服务数据管理后台任务(Background Task)管理设备管理设备使用信息统计DFX国际化开发折叠屏系列…… 鸿蒙开发面试真题含参考答案https://qr18.cn/F781PH 鸿蒙开发面试大盘集篇共计319页https://qr18.cn/F781PH
1.项目开发必备面试题 2.性能优化方向 3.架构方向 4.鸿蒙开发系统底层方向 5.鸿蒙音视频开发方向 6.鸿蒙车载开发方向 7.鸿蒙南向开发方向 var code “54a9ead6-f74e-41e4-a10f-202782466618”