觸發(fā)拖動(dòng)手勢(shì)事件

2024-01-22 16:48 更新

用于觸發(fā)拖動(dòng)手勢(shì)事件,滑動(dòng)的最小距離為5vp時(shí)拖動(dòng)手勢(shì)識(shí)別成功。

說(shuō)明

從API Version 7開(kāi)始支持。后續(xù)版本如有新增內(nèi)容,則采用上角標(biāo)單獨(dú)標(biāo)記該內(nèi)容的起始版本。

接口

PanGesture(value?: { fingers?: number; direction?: PanDirection; distance?: number } | PanGestureOptions)

參數(shù):

參數(shù)名稱

參數(shù)類型

必填

參數(shù)描述

fingers

number

觸發(fā)拖動(dòng)的最少手指數(shù),最小為1指, 最大取值為10指。

默認(rèn)值:1

取值范圍:[1,10]

說(shuō)明:

當(dāng)設(shè)置的值小于1或不設(shè)置時(shí),會(huì)被轉(zhuǎn)化為默認(rèn)值。

direction

PanDirection

觸發(fā)拖動(dòng)的手勢(shì)方向,此枚舉值支持邏輯與(&)和邏輯或(|)運(yùn)算。

默認(rèn)值:PanDirection.All

distance

number

最小拖動(dòng)識(shí)別距離,單位為vp。

默認(rèn)值:5

說(shuō)明:

Tabs組件滑動(dòng)與該拖動(dòng)手勢(shì)事件同時(shí)存在時(shí),可將distance值設(shè)為1,使拖動(dòng)更靈敏,避免造成事件錯(cuò)亂。

當(dāng)拖動(dòng)距離的值小于等于0時(shí),會(huì)被轉(zhuǎn)化為默認(rèn)值。

當(dāng)設(shè)置拖動(dòng)的距離超過(guò)當(dāng)前窗口尺寸的值時(shí),無(wú)法觸發(fā)拖動(dòng)。

PanDirection枚舉說(shuō)明

名稱

描述

All

所有方向。

Horizontal

水平方向。

Vertical

豎直方向。

Left

向左拖動(dòng)。

Right

向右拖動(dòng)。

Up

向上拖動(dòng)。

Down

向下拖動(dòng)。

None

任何方向都不可觸發(fā)拖動(dòng)手勢(shì)事件。

PanGestureOptions

通過(guò)PanGestureOptions對(duì)象接口可以動(dòng)態(tài)修改滑動(dòng)手勢(shì)識(shí)別器的屬性,從而避免通過(guò)狀態(tài)變量修改屬性(狀態(tài)變量修改會(huì)導(dǎo)致UI刷新)。

PanGestureOptions(value?: { fingers?: number; direction?: PanDirection; distance?: number })

參數(shù):

參數(shù)名稱

參數(shù)類型

必填

參數(shù)描述

fingers

number

觸發(fā)滑動(dòng)的最少手指數(shù),最小為1指, 最大取值為10指。

默認(rèn)值:1

direction

PanDirection

設(shè)置滑動(dòng)方向,此枚舉值支持邏輯與(&)和邏輯或(|)運(yùn)算。

默認(rèn)值:All

distance

number

最小滑動(dòng)識(shí)別距離,單位為vp。

默認(rèn)值:5.0

說(shuō)明:

Tabs組件滑動(dòng)與該拖動(dòng)手勢(shì)事件同時(shí)存在時(shí),可將distance值設(shè)為1,使拖動(dòng)更靈敏,避免造成事件錯(cuò)亂。

接口

名稱

功能描述

setDirection(value: PanDirection)

設(shè)置direction屬性。

setDistance(value: number)

設(shè)置distance屬性。

setFingers(value: number)

設(shè)置fingers屬性。

事件

名稱

功能描述

onActionStart(event: (event?: GestureEvent) => void)

Pan手勢(shì)識(shí)別成功回調(diào)。

onActionUpdate(event: (event?: GestureEvent) => void)

Pan手勢(shì)移動(dòng)過(guò)程中回調(diào)。

onActionEnd(event: (event?: GestureEvent) => void)

Pan手勢(shì)識(shí)別成功,手指抬起后觸發(fā)回調(diào)。

onActionCancel(event: () => void)

Pan手勢(shì)識(shí)別成功,接收到觸摸取消事件觸發(fā)回調(diào)。

示例

  1. // xxx.ets
  2. @Entry
  3. @Component
  4. struct PanGestureExample {
  5. @State offsetX: number = 0
  6. @State offsetY: number = 0
  7. @State positionX: number = 0
  8. @State positionY: number = 0
  9. private panOption: PanGestureOptions = new PanGestureOptions({ direction: PanDirection.Left | PanDirection.Right })
  10. build() {
  11. Column() {
  12. Column() {
  13. Text('PanGesture offset:\nX: ' + this.offsetX + '\n' + 'Y: ' + this.offsetY)
  14. }
  15. .height(200)
  16. .width(300)
  17. .padding(20)
  18. .border({ width: 3 })
  19. .margin(50)
  20. .translate({ x: this.offsetX, y: this.offsetY, z: 0 })// 以組件左上角為坐標(biāo)原點(diǎn)進(jìn)行移動(dòng)
  21. // 左右拖動(dòng)觸發(fā)該手勢(shì)事件
  22. .gesture(
  23. PanGesture(this.panOption)
  24. .onActionStart((event: GestureEvent) => {
  25. console.info('Pan start')
  26. })
  27. .onActionUpdate((event: GestureEvent) => {
  28. this.offsetX = this.positionX + event.offsetX
  29. this.offsetY = this.positionY + event.offsetY
  30. })
  31. .onActionEnd(() => {
  32. this.positionX = this.offsetX
  33. this.positionY = this.offsetY
  34. console.info('Pan end')
  35. })
  36. )
  37. Button('修改PanGesture觸發(fā)條件')
  38. .onClick(() => {
  39. // 將PanGesture手勢(shì)事件觸發(fā)條件改為雙指以任意方向拖動(dòng)
  40. this.panOption.setDirection(PanDirection.All)
  41. this.panOption.setFingers(2)
  42. })
  43. }
  44. }
  45. }

示意圖:

向左拖動(dòng):

點(diǎn)擊按鈕修改PanGesture觸發(fā)條件,雙指向左下方拖動(dòng):

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)