# 点击事件 组件被点击时触发的事件。 > **说明:** > > 从API version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 > > 点击事件遵循[触摸事件](../arkui-ts/ts-universal-events-touch.md)分发流程,触摸事件支持屏蔽、透传等自定义行为。 > > 事件分发可参考[事件交互流程](../../../ui/arkts-interaction-basic-principles.md#事件交互流程),手势事件处理流程可参考[多层级手势事件](../../../ui/arkts-gesture-events-multi-level-gesture.md)。 > > 当该点击事件由键盘或者手柄触发时,不会触发[onGestureJudgeBegin](./ts-gesture-customize-judge.md#ongesturejudgebegin),[onGestureRecognizerJudgeBegin](./ts-gesture-blocking-enhancement.md#ongesturerecognizerjudgebegin)和[willClick](../arkts-apis-uicontext-uiobserver.md#onwillclick12)的回调。 ## onClick12+ onClick(event: Callback\, distanceThreshold: number): T 点击动作触发该回调。 当触发点击事件的设备类型为键盘或手柄时,事件的[SourceTool](ts-gesture-settings.md#sourcetool枚举说明9)值为Unknown。 新增distanceThreshold参数,设置点击手势移动阈值。手指移动超出阈值时,点击手势识别失败。 对于无手指移动距离限制的点击场景,建议使用原有接口。若需限制点击时手指移动范围,建议使用该接口。 **卡片能力:** 从API version 12开始,该接口支持在ArkTS卡片中使用。 > **说明:** > > 从API version 12开始,在使用卡片能力时,存在以下限制: > 1. 如果手指按下的持续时间超过800ms,不能触发点击事件。 > 2. 如果手指按下后移动位移超过20px,不能触发点击事件。 **原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.ArkUI.ArkUI.Full **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------ | --------------------------------- | ---- | -------------------- | | event | Callback\<[ClickEvent](#clickevent)> | 是 | 点击事件的回调函数。 | | distanceThreshold | number | 是 | 点击事件移动阈值。当设置的值小于等于0时,会被转化为默认值。
默认值:2^31-1
单位:vp
**说明:**
当手指的移动距离超出开发者预设的移动阈值时,点击识别失败。如果初始化为默认阈值时,手指移动超过组件热区范围,点击识别失败。 | > **说明:** > > 如果执行滑动操作,但滑动距离未超过点击事件移动阈值,并且抬手时手指在组件热区范围内,也会触发点击事件。 **返回值:** | 类型 | 说明 | | -------- | -------- | | T | 返回当前组件。 | ## onClick onClick(event: (event: ClickEvent) => void): T 点击动作触发该回调。 触发点击事件的设备类型为键盘或手柄时,事件的SourceTool值为Unknown。 **卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。 > **说明:** > > 从API version 9开始,使用卡片能力时存在以下限制: > 1. 如果手指按下的持续时间超过800ms,不能触发点击事件。 > 2. 如果手指按下后移动位移超过20px,不能触发点击事件。 **原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 **系统能力:** SystemCapability.ArkUI.ArkUI.Full **参数:** | 参数名 | 类型 | 必填 | 说明 | | ------ | --------------------------------- | ---- | -------------------- | | event | (event: [ClickEvent](#clickevent)) => void | 是 | 点击事件的回调函数。 | **返回值:** | 类型 | 说明 | | -------- | -------- | | T | 返回当前组件。 | ## ClickEvent 继承于[BaseEvent](ts-gesture-customize-judge.md#baseevent8)。 **系统能力:** SystemCapability.ArkUI.ArkUI.Full | 名称 | 类型 | 只读 | 可选 | 说明 | | ------------------- | ------------------------- | ------ | -------- | -------------------------------------------------------- | | x | number | 否 | 否 | 点击位置相对于被点击元素左边缘的X坐标。
单位:vp
**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 | | y | number | 否 | 否 | 点击位置相对于被点击元素原始区域左上角的Y坐标。
单位:vp
**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 | | windowX10+ | number | 否 | 否 | 点击位置相对于应用窗口左上角的X坐标。
单位:vp
**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 | | windowY10+ | number | 否 | 否 | 点击位置相对于应用窗口左上角的Y坐标。
单位:vp
**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 | | displayX10+ | number | 否 | 否 | 点击位置相对于应用屏幕左上角的X坐标。
单位:vp
**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 | | displayY10+ | number | 否 | 否 | 点击位置相对于应用屏幕左上角的Y坐标。
单位:vp
**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 | | screenX(deprecated) | number | 否 | 否 | 点击位置相对于应用窗口左上角的X坐标。
单位:vp
从API version 10开始不再维护,建议使用windowX代替。 | | screenY(deprecated) | number | 否 | 否 | 点击位置相对于应用窗口左上角的Y坐标。
单位:vp
从API version 10开始不再维护,建议使用windowY代替。 | | preventDefault12+ | () => void | 否 | 否 | 阻止默认事件。
**说明:** 该接口仅支持部分组件使用,当前支持组件:RichEditor、Hyperlink,不支持的组件使用时会抛出异常。暂不支持异步调用和提供Modifier接口。
**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。| | hand15+ | [InteractionHand](./ts-appendix-enums.md#interactionhand15) | 否 | 是 | 表示事件是由左手点击还是右手点击触发。
**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。 | | globalDisplayX20+ | number | 否 | 是 | 点击位置相对于全局屏幕的左上角的X坐标。
单位:vp
取值范围:[0, +∞)
**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。 | | globalDisplayY20+ | number | 否 | 是 | 点击位置相对于全局屏幕的左上角的Y坐标。
单位:vp
取值范围:[0, +∞)
**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。 | **错误码:** 以下错误码的详细介绍请参见[交互事件错误码](../errorcode-event.md)。 | 错误码ID | 错误信息 | | --------- | ------- | | 100017 | Component does not support prevent function. | ## EventTarget8+ [BaseEvent](ts-gesture-customize-judge.md#baseevent8)中参数target的类型。 触发事件的元素对象的显示区域。 **系统能力:** SystemCapability.ArkUI.ArkUI.Full | 名称 | 类型 | 只读 | 可选 | 说明 | | ---- | ------------------------- |-----|------| ---------- | | area | [Area](ts-types.md#area8) | 否 | 否 | 目标元素的区域信息。
**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 | | id15+ | [string](ts-universal-attributes-component-id.md) | 否 | 是 | 开发者设置的节点id。默认值:undefined
**卡片能力:** 从API version 15开始,该接口支持在ArkTS卡片中使用。
**原子化服务API:** 从API version 15开始,该接口支持在原子化服务中使用。| ## 示例 该示例通过按钮设置点击事件,点击按钮可获取点击事件的相关参数。 ```ts // 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%') } } ``` ![click](figures/click.gif)