• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 触摸事件
2
3当手指在组件上按下、滑动、抬起时触发。
4
5> **说明:**
6>
7> 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
8
9
10## 事件
11
12| 名称                                                         | 是否冒泡 | 功能描述                                                     |
13| ------------------------------------------------------------ | -------- | ------------------------------------------------------------ |
14| onTouch(event: (event?: TouchEvent) => void) | 是       | 手指触摸动作触发该回调,event返回值见[TouchEvent](#touchevent对象说明)介绍。 |
15
16
17## TouchEvent对象说明
18
19| 名称                | 类型                                       | 描述           |
20| ------------------- | ---------------------------------------- | ------------ |
21| type                | [TouchType](ts-appendix-enums.md#touchtype)      | 触摸事件的类型。     |
22| touches             | Array<[TouchObject](#touchobject对象说明)> | 全部手指信息。      |
23| changedTouches      | Array<[TouchObject](#touchobject对象说明)> | 当前发生变化的手指信息。 |
24| stopPropagation      | () => void | 阻塞事件冒泡。 |
25| timestamp<sup>8+</sup> | number | 事件时间戳。触发事件时距离系统启动的时间间隔,单位纳秒。<br/>例如当系统启动时间为2023/10/12 11:33, 在2023/10/12 11:34时触发触摸事件,时间戳返回的值为60,000,000,000ns |
26| target<sup>8+</sup> | [EventTarget](ts-universal-events-click.md#eventtarget8对象说明) | 触发事件的元素对象显示区域。 |
27| source<sup>8+</sup> | [SourceType](ts-gesture-settings.md#sourcetype枚举说明) | 事件输入设备。 |
28| getHistoricalPoints<sup>10+</sup> | Array&lt;[HistoricalPoint](#historicalpoint10对象说明)&gt;| 获取当前帧所有的历史点(不同设备每帧的触摸事件频率不同,当前帧所有的触摸事件被称为历史点)。 |
29
30
31## TouchObject对象说明
32
33| 名称    | 类型                                        | 描述                                  |
34| ------- | ------------------------------------------- | ------------------------------------- |
35| type    | [TouchType](ts-appendix-enums.md#touchtype) | 触摸事件的类型。                      |
36| id      | number                                      | 手指唯一标识符。                      |
37| x       | number                                      | 触摸点相对于被触摸元素左上角的X坐标。 |
38| y       | number                                      | 触摸点相对于被触摸元素左上角的Y坐标。 |
39| windowX<sup>10+</sup>  | number                       | 触摸点相对于应用窗口左上角的X坐标。   |
40| windowY<sup>10+</sup>  | number                       | 触摸点相对于应用窗口左上角的Y坐标。   |
41| displayX<sup>10+</sup> | number                       | 触摸点相对于应用屏幕左上角的X坐标。   |
42| displayY<sup>10+</sup> | number                       | 触摸点相对于应用屏幕左上角的Y坐标。   |
43| screenX<sup>(deprecated)</sup> | number               | 触摸点相对于应用窗口左上角的X坐标。<br>从API verdion 10开始不再维护,建议使用windowX代替。   |
44| screenY<sup>(deprecated)</sup> | number               | 触摸点相对于应用窗口左上角的Y坐标。<br>从API verdion 10开始不再维护,建议使用windowX代替。   |
45
46## HistoricalPoint<sup>10+</sup>对象说明
47
48| 名称         | 类型                                 | 描述                                                                         |
49| ----------- | ----------------------------------- | ----------------------------------------------------------------------------- |
50| touchObject | [TouchObject](#touchobject对象说明)  | 历史点对应触摸事件的基础信息。                                                   |
51| size        | number                              | 历史点对应触摸事件的手指与屏幕的触摸区域大小。<br/>默认值:0                                     |
52| force       | number                              | 历史点对应触摸事件的压力大小。<br/>默认值:0<br/>取值范围:[0,1],压力越大值越大。<br/>此接口根据硬件设备不同,支持情况不同。当前只支持Tablet。|
53| timestamp   | number                              | 历史点对应触摸事件的时间戳。触发事件时距离系统启动的时间间隔,单位毫秒。             |
54## 示例
55
56```ts
57// xxx.ets
58@Entry
59@Component
60struct TouchExample {
61  @State text: string = ''
62  @State eventType: string = ''
63
64  build() {
65    Column() {
66      Button('Touch').height(40).width(100)
67        .onTouch((event?: TouchEvent) => {
68          if(event){
69            if (event.type === TouchType.Down) {
70              this.eventType = 'Down'
71            }
72            if (event.type === TouchType.Up) {
73              this.eventType = 'Up'
74            }
75            if (event.type === TouchType.Move) {
76              this.eventType = 'Move'
77            }
78            this.text = 'TouchType:' + this.eventType + '\nDistance between touch point and touch element:\nx: '
79            + event.touches[0].x + '\n' + 'y: ' + event.touches[0].y + '\nComponent globalPos:('
80            + event.target.area.globalPosition.x + ',' + event.target.area.globalPosition.y + ')\nwidth:'
81            + event.target.area.width + '\nheight:' + event.target.area.height
82          }
83        })
84      Button('Touch').height(50).width(200).margin(20)
85        .onTouch((event?: TouchEvent) => {
86          if(event){
87            if (event.type === TouchType.Down) {
88              this.eventType = 'Down'
89            }
90            if (event.type === TouchType.Up) {
91              this.eventType = 'Up'
92            }
93            if (event.type === TouchType.Move) {
94              this.eventType = 'Move'
95            }
96            this.text = 'TouchType:' + this.eventType + '\nDistance between touch point and touch element:\nx: '
97            + event.touches[0].x + '\n' + 'y: ' + event.touches[0].y + '\nComponent globalPos:('
98            + event.target.area.globalPosition.x + ',' + event.target.area.globalPosition.y + ')\nwidth:'
99            + event.target.area.width + '\nheight:' + event.target.area.height
100          }
101        })
102      Text(this.text)
103    }.width('100%').padding(30)
104  }
105}
106```
107
108![zh-cn_image_0000001209874754](figures/zh-cn_image_0000001209874754.gif)
109