1.觸摸事件。
觸摸事件是HarmonyOS通用事件的一種事件之一,當手指在組件上按下、滑動、抬起時觸發。
名稱 | 是否冒泡 | 功能描述 |
---|---|---|
onTouch(event: (event?: TouchEvent) => void) | 是 | 手指觸摸動作觸發該回調,event返回值見下面TouchEvent介紹。 |
2. TouchEvent對象
名稱 | 類型 | 描述 |
---|---|---|
onTouch(event: (event?: TouchEvent) => void) | 是 | 手指觸摸動作觸發該回調,event返回值見下面TouchEvent介紹。 |
type | TouchType | 觸摸事件的類型。 |
touches | Array<TouchObject> | 全部手指信息。 |
changedTouches | Array<TouchObject> | 當前發生變化的手指信息。 |
stopPropagation | () => void | 阻塞事件冒泡。 |
timestamp8+ | number | 事件時間戳。觸發事件時距離系統啟動的時間間隔,單位納秒。 |
target8+ | EventTarget | 觸發事件的元素對象顯示區域。 |
source8+ | SourceType | 事件輸入設備。 |
3.TouchObject對象
名稱 | 類型 | 描述 |
---|---|---|
type | TouchType | 觸摸事件的類型 |
id | number | 手指唯一標識符 |
sscreenX | number | 觸摸點相對于應用窗口左上角的X坐標。 |
screenY | number | 觸摸點相對于應用窗口左上角的Y坐標。 |
X | number | 觸摸點相對于被觸摸元素左上角的X坐標。 |
Y | number | 觸摸點相對于被觸摸元素左上角的Y坐標。 |
4. 完整實例
下面用一個簡單的小列子查看一下觸摸事件touch對應的TouchEvent的用法。
// xxx.ets
@Entry
@Component
struct TouchExample {@State text: string = ''@State eventType: string = ''build() {Column() {Button('Touch').height(40).width(100).onTouch((event: TouchEvent) => {if (event.type === TouchType.Down) {this.eventType = 'Down'}if (event.type === TouchType.Up) {this.eventType = 'Up'}if (event.type === TouchType.Move) {this.eventType = 'Move'}this.text = 'TouchType:' + this.eventType + '\nDistance between touch point and touch element:\nx: '+ event.touches[0].x + '\n' + 'y: ' + event.touches[0].y + '\nComponent globalPos:('+ event.target.area.globalPosition.x + ',' + event.target.area.globalPosition.y + ')\nwidth:'+ event.target.area.width + '\nheight:' + event.target.area.height})Button('Touch').height(50).width(200).margin(20).onTouch((event: TouchEvent) => {if (event.type === TouchType.Down) {this.eventType = 'Down'}if (event.type === TouchType.Up) {this.eventType = 'Up'}if (event.type === TouchType.Move) {this.eventType = 'Move'}this.text = 'TouchType:' + this.eventType + '\nDistance between touch point and touch element:\nx: '+ event.touches[0].x + '\n' + 'y: ' + event.touches[0].y + '\nComponent globalPos:('+ event.target.area.globalPosition.x + ',' + event.target.area.globalPosition.y + ')\nwidth:'+ event.target.area.width + '\nheight:' + event.target.area.height})Text(this.text)}.width('100%').padding(30)}
}
運行查看一下效果如下: