【ArkTS-通用事件】

ArkTS-通用事件

  • [■ 基础输入事件](#■ 基础输入事件)
    • [■ 1. onTouch 触摸事件](#■ 1. onTouch 触摸事件)
    • [■ 2. onHover 鼠标悬浮](#■ 2. onHover 鼠标悬浮)
    • [■ 3. onMouse 鼠标事件](#■ 3. onMouse 鼠标事件)
    • [■ 4. onAxisEvent 轴事件](#■ 4. onAxisEvent 轴事件)
    • [■ 5. onKeyEvent 按键事件](#■ 5. onKeyEvent 按键事件)
    • [■ 6. onDigitalCrown 表冠事件](#■ 6. onDigitalCrown 表冠事件)
    • [■ 7. onFocusAxisEvent 焦点轴事件](#■ 7. onFocusAxisEvent 焦点轴事件)
  • [■ 交互响应事件](#■ 交互响应事件)
    • [■ 1. onClick 点击事件](#■ 1. onClick 点击事件)
    • [■ 2. 拖拽事件](#■ 2. 拖拽事件)
    • [■ 3. 焦点事件](#■ 3. 焦点事件)
    • [■ 4. 悬浮事件](#■ 4. 悬浮事件)
    • [■ 5. 交互事件分发控制](#■ 5. 交互事件分发控制)
    • [■ 6. 组件变化事件-挂载卸载事件](#■ 6. 组件变化事件-挂载卸载事件)
    • [■ 7. 组件变化事件](#■ 7. 组件变化事件)
      • [■ onAreaChange 组件区域变化事件](#■ onAreaChange 组件区域变化事件)
      • [■ onSizeChange 组件尺寸变化事件](#■ onSizeChange 组件尺寸变化事件)
      • [■ onVisibleAreaChange 组件可见区域变化事件](#■ onVisibleAreaChange 组件可见区域变化事件)
        • [■ 示例1 (使用onVisibleAreaChange来监听区域变化)](#■ 示例1 (使用onVisibleAreaChange来监听区域变化))
        • [■ 示例2 (使用onVisibleAreaApproximateChange来监听区域变化)](#■ 示例2 (使用onVisibleAreaApproximateChange来监听区域变化))
  • [■ 设置事件回调](#■ 设置事件回调)
    • [■ 1. setOnClick](#■ 1. setOnClick)
    • [■ 2. setOnTouch](#■ 2. setOnTouch)
    • [■ 3. setOnAppear](#■ 3. setOnAppear)
    • [■ 4. setOnDisappear](#■ 4. setOnDisappear)
    • [■ 5. setOnKeyEvent](#■ 5. setOnKeyEvent)
    • [■ 6. setOnFocus](#■ 6. setOnFocus)
    • [■ 7. setOnBlur](#■ 7. setOnBlur)
    • [■ 8. setOnHover](#■ 8. setOnHover)
    • [■ 9. setOnMouse](#■ 9. setOnMouse)
    • [■ 10. setOnSizeChange](#■ 10. setOnSizeChange)
    • [■ 11. setOnVisibleAreaApproximateChange](#■ 11. setOnVisibleAreaApproximateChange)
    • [■ 12. HoverCallback](#■ 12. HoverCallback)

■ 基础输入事件


■ 1. onTouch 触摸事件

■ 2. onHover 鼠标悬浮

■ 3. onMouse 鼠标事件

■ 4. onAxisEvent 轴事件

轴事件指组件被鼠标滚轮滚动或触控板双指沿特定方向(轴)滑动时触发的事件。"轴"指二维坐标系中的方向,分为水平(X轴)和垂直(Y轴)。

■ 5. onKeyEvent 按键事件

是指组件与键盘、遥控器等按键设备交互时触发的事件,适用于所有可获焦组件,例如Button。对于默认不可获焦的组件,如Text,Image等,可以将focusable属性设置为true后使用按键事件。

■ 6. onDigitalCrown 表冠事件

■ 7. onFocusAxisEvent 焦点轴事件

■ 交互响应事件

■ 1. onClick 点击事件

点击动作触发该回调。

c 复制代码
// xxx.ets
@Entry
@Component
struct ClickExample {
  @State text: string = '';

  build() {
    Column() {
      Row({ space: 20 }) {
        Button('Click').width(100).height(40).id('click1')
          .onClick((event?: ClickEvent) => {
            if(event){
              this.text = 'Click Point:' + '\n  windowX:' + event.windowX + '\n  windowY:' + event.windowY
                + '\n  x:' + event.x + '\n  y:' + event.y + '\ntarget:' + '\n  component globalPos:('
                + event.target.area.globalPosition.x + ',' + event.target.area.globalPosition.y + ')\n  width:'
                + event.target.area.width + '\n  height:' + event.target.area.height + '\n  id:'+ event.target.id
                + '\ntargetDisplayId:' + event.targetDisplayId + '\ntimestamp' + event.timestamp;
            }
          }, 20)
        Button('Click').width(200).height(50).id('click2')
          .onClick((event?: ClickEvent) => {
            if(event){
              this.text = 'Click Point:' + '\n  windowX:' + event.windowX + '\n  windowY:' + event.windowY
                + '\n  x:' + event.x + '\n  y:' + event.y + '\ntarget:' + '\n  component globalPos:('
                + event.target.area.globalPosition.x + ',' + event.target.area.globalPosition.y + ')\n  width:'
                + event.target.area.width + '\n  height:' + event.target.area.height + '\n  id:'+ event.target.id
                + '\ntargetDisplayId:' + event.targetDisplayId + '\ntimestamp' + event.timestamp;
            }
          }, 20)
      }.margin(20)

      Text(this.text).margin(15)
    }.width('100%')
  }
}

■ 2. 拖拽事件

拖拽事件是指在用户界面中,当用户拖动某个对象(如文件、控件或元素)时触发的一系列事件。

这些事件允许开发者自定义拖拽行为,实现诸如拖放、调整位置等功能。

属性 描述
onDragStart
onDragEnter 拖拽进入组件范围内时,触发回调,当监听了onDrop事件时,此事件才有效。
onDragMove 拖拽在组件范围内移动时,触发回调,当监听了onDrop事件时,此事件才有效。
onDragLeave 拖拽离开组件范围内时,触发回调,当监听了onDrop事件时,此事件才有效。
onDrop
onDragEnd
onPreDrag

■ 3. 焦点事件

当前组件获取焦点时触发的回调。

属性 描述
onFocus 焦点事件
onBlur 失去焦点时触发

■ 4. 悬浮事件

属性 描述
onHover 鼠标或手写笔进入或退出组件时,触发hover事件。
onPreDrag

■ 5. 交互事件分发控制

属性 描述
onTouchIntercept 自定义事件拦截, 给组件绑定自定义事件拦截回调。
onChildTouchTest 自定义事件分发, 当前组件通过设置回调,可自定义触摸测试并控制触摸测试中的子节点行为。

■ 6. 组件变化事件-挂载卸载事件

属性 描述
onAttach 组件挂载到组件树时触发此回调。
onDetach 组件从组件树卸载时触发此回调。
onAppear 组件挂载显示后触发此回调。
onDisAppear 组件从组件树卸载消失时触发此回调。

■ 7. 组件变化事件

■ onAreaChange 组件区域变化事件

组件区域变化时触发该回调。仅会响应由布局变化所导致的组件大小、位置发生变化时的回调

c 复制代码
// xxx.ets
@Entry
@Component
struct AreaExample {
  @State value: string = 'Text'
  @State sizeValue: string = ''

  build() {
    Column() {
      Text(this.value)
        .backgroundColor(Color.Green)
        .margin(30)
        .fontSize(20)
        .onClick(() => {
          this.value = this.value + 'Text'
        })
        .onAreaChange((oldValue: Area, newValue: Area) => {
          console.info(`Ace: on area change, oldValue is ${JSON.stringify(oldValue)} value is ${JSON.stringify(newValue)}`)
          this.sizeValue = JSON.stringify(newValue)
        })
      Text('new area is: \n' + this.sizeValue).margin({ right: 30, left: 30 })
    }
    .width('100%').height('100%').margin({ top: 30 })
  }
}

■ onSizeChange 组件尺寸变化事件

c 复制代码
// xxx.ets
@Entry
@Component
struct AreaExample {
  @State value: string = 'Text'
  @State sizeValue: string = ''

  build() {
    Column() {
      Text(this.value)
        .backgroundColor(Color.Green)
        .margin(30)
        .fontSize(20)
        .onClick(() => {
          this.value = this.value + 'Text'
        })
        .onSizeChange((oldValue: SizeOptions, newValue: SizeOptions) => {
          console.info(`Ace: on size change, oldValue is ${JSON.stringify(oldValue)} value is ${JSON.stringify(newValue)}`)
          this.sizeValue = JSON.stringify(newValue)
        })
      Text('new area is: \n' + this.sizeValue).margin({ right: 30, left: 30 })
    }
    .width('100%').height('100%').margin({ top: 30 })
  }
}

■ onVisibleAreaChange 组件可见区域变化事件

■ 示例1 (使用onVisibleAreaChange来监听区域变化)
c 复制代码
// xxx.ets
@Entry
@Component
struct ScrollExample {
  scroller: Scroller = new Scroller()
  private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  @State testTextStr: string = 'test'
  @State testRowStr: string = 'test'

  build() {
    Column() {
      Column() {
        Text(this.testTextStr)
          .fontSize(20)

        Text(this.testRowStr)
          .fontSize(20)
      }
      .height(100)
      .backgroundColor(Color.Gray)
      .opacity(0.3)

      Scroll(this.scroller) {
        Column() {
          Text("Test Text Visible Change")
            .fontSize(20)
            .height(200)
            .margin({ top: 50, bottom: 20 })
            .backgroundColor(Color.Green)
              // 通过设置ratios为[0.0, 1.0],实现当组件完全显示或完全消失在屏幕中时触发回调。
            .onVisibleAreaChange([0.0, 1.0], (isExpanding: boolean, currentRatio: number) => {
              console.info('Test Text isExpanding: ' + isExpanding + ', currentRatio:' + currentRatio)
              if (isExpanding && currentRatio >= 1.0) {
                console.info('Test Text is fully visible. currentRatio:' + currentRatio)
                this.testTextStr = 'Test Text is fully visible'
              }

              if (!isExpanding && currentRatio <= 0.0) {
                console.info('Test Text is completely invisible.')
                this.testTextStr = 'Test Text is completely invisible'
              }
            })

          Row() {
            Text('Test Row Visible  Change')
              .fontSize(20)
              .margin({ bottom: 20 })

          }
          .height(200)
          .backgroundColor(Color.Yellow)
          .onVisibleAreaChange([0.0, 1.0], (isExpanding: boolean, currentRatio: number) => {
            console.info('Test Row isExpanding:' + isExpanding + ', currentRatio:' + currentRatio)
            if (isExpanding && currentRatio >= 1.0) {
              console.info('Test Row is fully visible.')
              this.testRowStr = 'Test Row is fully visible'
            }

            if (!isExpanding && currentRatio <= 0.0) {
              console.info('Test Row is completely invisible.')
              this.testRowStr = 'Test Row is completely invisible'
            }
          })

          ForEach(this.arr, (item:number) => {
            Text(item.toString())
              .width('90%')
              .height(150)
              .backgroundColor(0xFFFFFF)
              .borderRadius(15)
              .fontSize(16)
              .textAlign(TextAlign.Center)
              .margin({ top: 10 })
          }, (item:number) => (item.toString()))

        }.width('100%')
      }
      .backgroundColor(0x317aff)
      .scrollable(ScrollDirection.Vertical)
      .scrollBar(BarState.On)
      .scrollBarColor(Color.Gray)
      .scrollBarWidth(10)
      .onWillScroll((xOffset: number, yOffset: number, scrollState: ScrollState) => {
        console.info(xOffset + ' ' + yOffset)
      })
      .onScrollEdge((side: Edge) => {
        console.info('To the edge')
      })
      .onScrollStop(() => {
        console.info('Scroll Stop')
      })

    }.width('100%').height('100%').backgroundColor(0xDCDCDC)
  }
}
■ 示例2 (使用onVisibleAreaApproximateChange来监听区域变化)
c 复制代码
// xxx.ets
@Entry
@Component
struct ScrollExample {
  scroller: Scroller = new Scroller()
  private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  @State testTextStr: string = 'test'
  @State testRowStr: string = 'test'

  build() {
    Column() {
      Column() {
        Text(this.testTextStr)
          .fontSize(20)

        Text(this.testRowStr)
          .fontSize(20)
      }
      .height(100)
      .backgroundColor(Color.Gray)
      .opacity(0.3)

      Scroll(this.scroller) {
        Column() {
          Text("Test Text Visible Change")
            .fontSize(20)
            .height(200)
            .margin({ top: 50, bottom: 20 })
            .backgroundColor(Color.Green)
              // 通过设置ratios为[0.0, 1.0],实现当组件完全显示或完全消失在屏幕中时触发回调。
            .onVisibleAreaApproximateChange({ratios: [0.0, 1.0], expectedUpdateInterval: 1000}, (isExpanding: boolean, currentRatio: number) => {
              console.info('Test Text isExpanding: ' + isExpanding + ', currentRatio:' + currentRatio)
              if (isExpanding && currentRatio >= 1.0) {
                console.info('Test Text is fully visible. currentRatio:' + currentRatio)
                this.testTextStr = 'Test Text is fully visible'
              }

              if (!isExpanding && currentRatio <= 0.0) {
                console.info('Test Text is completely invisible.')
                this.testTextStr = 'Test Text is completely invisible'
              }
            })

          Row() {
            Text('Test Row Visible  Change')
              .fontSize(20)
              .margin({ bottom: 20 })

          }
          .height(200)
          .backgroundColor(Color.Yellow)
          .onVisibleAreaChange([0.0, 1.0], (isExpanding: boolean, currentRatio: number) => {
            console.info('Test Row isExpanding:' + isExpanding + ', currentRatio:' + currentRatio)
            if (isExpanding && currentRatio >= 1.0) {
              console.info('Test Row is fully visible.')
              this.testRowStr = 'Test Row is fully visible'
            }

            if (!isExpanding && currentRatio <= 0.0) {
              console.info('Test Row is completely invisible.')
              this.testRowStr = 'Test Row is completely invisible'
            }
          })

          ForEach(this.arr, (item:number) => {
            Text(item.toString())
              .width('90%')
              .height(150)
              .backgroundColor(0xFFFFFF)
              .borderRadius(15)
              .fontSize(16)
              .textAlign(TextAlign.Center)
              .margin({ top: 10 })
          }, (item:number) => (item.toString()))

        }.width('100%')
      }
      .backgroundColor(0x317aff)
      .scrollable(ScrollDirection.Vertical)
      .scrollBar(BarState.On)
      .scrollBarColor(Color.Gray)
      .scrollBarWidth(10)
      .onWillScroll((xOffset: number, yOffset: number, scrollState: ScrollState) => {
        console.info(xOffset + ' ' + yOffset)
      })
      .onScrollEdge((side: Edge) => {
        console.info('To the edge')
      })
      .onScrollStop(() => {
        console.info('Scroll Stop')
      })

    }.width('100%').height('100%').backgroundColor(0xDCDCDC)
  }
}

■ 设置事件回调

设置事件回调

■ 1. setOnClick

■ 2. setOnTouch

■ 3. setOnAppear

■ 4. setOnDisappear

■ 5. setOnKeyEvent

■ 6. setOnFocus

■ 7. setOnBlur

■ 8. setOnHover

■ 9. setOnMouse

■ 10. setOnSizeChange

■ 11. setOnVisibleAreaApproximateChange

■ 12. HoverCallback

相关推荐
Miguo94well4 小时前
Flutter框架跨平台鸿蒙开发——地理知识速记APP的开发流程
flutter·华为·harmonyos·鸿蒙
讯方洋哥6 小时前
HarmonyOS App开发——鸿蒙音乐播放机应用App开发
华为·harmonyos
小雨青年7 小时前
【鸿蒙原生开发会议随记 Pro】 会议随记 Pro v1.1 发布 详解 HarmonyOS NEXT 原生国际化(i18n)架构与最佳实践
华为·harmonyos
木斯佳8 小时前
HarmonyOS 6实战(源码教学篇)— Speech Kit TextReader:【仿某云音乐接入语音朗读控件】
华为·harmonyos
南村群童欺我老无力.8 小时前
Flutter 框架跨平台鸿蒙开发 - 校园生活一站式:打造智慧校园服务平台
flutter·华为·harmonyos
南村群童欺我老无力.10 小时前
Flutter 框架跨平台鸿蒙开发 - 城市文创打卡:探索城市文化创意之旅
android·flutter·华为·harmonyos
yingdonglan11 小时前
Flutter 框架跨平台鸿蒙开发 ——AnimatedBuilder性能优化详解
flutter·性能优化·harmonyos
菜鸟小芯12 小时前
【开源鸿蒙跨平台开发先锋训练营】DAY8~DAY13 底部选项卡&首页功能实现
flutter·harmonyos
大雷神12 小时前
HarmonyOS智慧农业管理应用开发教程--高高种地-- 第19篇:语音合成 - TTS语音播报
华为·语音识别·harmonyos
b20772112 小时前
Flutter for OpenHarmony 身体健康状况记录App实战 - 提醒设置实现
python·flutter·macos·cocoa·harmonyos