通用事件

点击

//distanceThreshold参数作为点击事件移动阈值,当手指的移动距离超出所设置的点击手势移动阈值时,点击手势识别失败
//distanceThreshold默认值:2^31-1
onClick(event: Callback<ClickEvent>, distanceThreshold: number): T

触摸

//当手指在组件上按下、滑动、抬起时触发。
onTouch(event: (event: TouchEvent) => void): T
//该接口只能在TouchEvent中调用
//通过该接口获取触发onTouch时当前帧历史点的相关信息。
//onTouch一帧只会调用一次,若当前帧收到的TouchEvent大于1,会将该帧最后一个点通过onTouch返还,剩余点作为历史点
getHistoricalPoints(): Array<HistoricalPoint>

挂载卸载

组件从组件树上挂载、卸载时触发的事件。

//组件挂载至组件树时触发此回调。
//回调的调用时机一定在组件布局渲染之前
//不允许在回调中对组件树进行变更
//T表示返回当前组件。
onAttach(callback: Callback<void>): T
//组件从组件树卸载时触发此回调
onDetach(callback: Callback<void>): T
//组件挂载显示后触发此回调
//回调的调用时机有可能发生在组件布局渲染后
onAppear(event: () => void): T
//组件卸载消失时触发此回调。
onDisAppear(event: () => void): T

拖拽

可通过将draggable属性设置为true达成拖拽功能的组件有:

  • 默认支持拖出能力的组件(可从组件上拖出数据):Search、TextInput、TextArea、RichEditor、Text、Image、Hyperlink
  • 默认支持拖入能力的组件(目标组件可响应拖入数据):Search、TextInput、TextArea、Video
    其他组件需要开发者将draggable属性设置为true,并在onDragStart等接口中实现数据传输相关内容,才能正确处理拖拽
//第一次拖拽此事件绑定的组件时,长按时间 >= 500ms,然后手指移动距离 >= 10vp,触发回调
onDragStart(event: (event: DragEvent, extraParams?: string) => CustomBuilder | DragItemInfo)
//拖拽进入组件范围内时,触发回调,当监听了onDrop事件时,此事件才有效
onDragEnter(event: (event: DragEvent, extraParams?: string) => void)
//拖拽在组件范围内移动时,触发回调,当监听了onDrop事件时,此事件才有效
onDragMove(event: (event: DragEvent, extraParams?: string) => void)
//拖拽离开组件范围内时,触发回调,当监听了onDrop事件时,此事件才有效
onDragLeave(event: (event: DragEvent, extraParams?: string) => void)
//在本组件范围内停止拖拽行为时,触发回调
onDrop(event: (event: DragEvent, extraParams?: string) => void)
//绑定此事件的组件触发的拖拽结束后,触发回调
onDragEnd(event: (event: DragEvent, extraParams?: string) => void)
//绑定此事件的组件,当触发拖拽发起前的不同阶段时,触发回调
onPreDrag(event: (preDragStatus: PreDragStatus) => void)

按键

按键事件指组件与键盘、遥控器等按键设备交互时触发的事件

//绑定该方法的组件获焦后,按键动作触发该回调
onKeyEvent(event: (event: KeyEvent) => void): T
//绑定该方法的组件获焦后,按键动作优先触发该回调
//回调的返回值为true时,视作该按键事件已被消费,后续的事件回调(keyboardShortcut、输入法事件、onKeyEvent)会被拦截,不再触发
onKeyPreIme(event: Callback<KeyEvent, boolean>): T

焦点

焦点事件指页面焦点在可获焦组件间移动时触发的事件

//当前组件获取焦点时触发的回调
onFocus(event: () => void)
//当前组件失去焦点时触发的回调
onBlur(event:() => void)


鼠标

在鼠标的单个动作触发多个事件时,事件的顺序是固定的,鼠标事件默认透传

//当前组件被鼠标按键点击时或者鼠标在组件上悬浮移动时,触发该回调
onMouse(event: (event: MouseEvent) => void)

悬浮

鼠标滑动,或者手写笔在屏幕上悬浮移动扫过组件时触发

//鼠标或手写笔进入或退出组件时触发hover事件
onHover(event: (isHover: boolean, event: HoverEvent) => void): T

无障碍悬浮

开启无障碍模式后,Touch事件会转换为无障碍悬浮事件

//开启无障碍模式后,单指触摸绑定该回调的组件时触发该回调
onAccessibilityHover(callback: AccessibilityCallback): T
//提供开启无障碍模式后的无障碍悬浮回调事件类型
type AccessibilityCallback = (isHover: boolean, event: AccessibilityHoverEvent) => void

组件区域变化

组件区域变化事件指组件显示的尺寸、位置等发生变化时触发的事件

//组件区域变化时触发该回调
//仅会响应由布局变化所导致的组件大小、位置发生变化时的回调
onAreaChange(event: (oldValue: Area, newValue: Area) => void): T

组件尺寸变化

//组件区域变化时触发该回调。仅会响应由布局变化所导致的组件尺寸发生变化时的回调
onSizeChange(event: SizeChangeCallback): T
//组件区域变化时的回调类型
SizeChangeCallback = (oldValue: SizeOptions, newValue: SizeOptions) => void

组件可见区域变化

  • 组件在屏幕中的显示区域面积变化时触发的事件
  • 提供了判断组件是否完全或部分显示在屏幕中的能力,适用于广告曝光埋点之类的场景
//组件可见区域变化时触发该回调
//
onVisibleAreaChange(ratios: Array<number>, event: (isVisible: boolean, currentRatio: number) => void): T

组件快捷键

  • 设置组合键的同时可以设置自定义事件,组合键按下时,触发该自定义事件
  • 若没有设置自定义事件,则组合键行为与click行为一致
//设置组件的自定义组合键
keyboardShortcut(value: string | FunctionKey, keys: Array<ModifierKey>, action?: () => void): T

系统已存在的按键事件

快捷键 获焦组件 用途 事件处理类别

方向键、Shift + 方向键 | 输入框组件 | 移动光标 | 输入法
方向键、Shift + 方向键 | 通用组件 | 系统处于走焦状态时,用于方向走焦 | 系统按键
TAB、Shift + TAB | 通用组件 | 触发进入走焦状态/走焦 | 系统按键

自定义事件分发

  • ArkUI在处理触屏事件时,会在触屏事件触发前进行按压点和组件区域的触摸测试,来收集需要响应触屏事件的组件,再基于触摸测试结果分发相应的触屏事件
  • 可以通过onChildTouchTest决定如何让子节点去做触摸测试,影响子组件的触摸测试,最终影响后续的触屏事件分发
//当前组件可通过设置回调来自定义子节点如何去做触摸测试
onChildTouchTest(event: (value: Array<TouchTestInfo>) => TouchResult): T

自定义事件拦截

  • 为组件提供自定义的事件拦截能力
  • 可根据事件在控件上按下时发生的位置,输入源等事件信息决定控件上的HitTestMode属性
onTouchIntercept(callback: Callback<TouchEvent, HitTestMode>)