# 点击事件
组件被点击时触发的事件。
> **说明:**
>
> 从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%')
}
}
```
