觸發(fā)拖動手勢事件

2024-01-22 16:48 更新

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

說明

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

接口

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

參數(shù):

參數(shù)名稱

參數(shù)類型

必填

參數(shù)描述

fingers

number

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

默認(rèn)值:1

取值范圍:[1,10]

說明:

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

direction

PanDirection

觸發(fā)拖動的手勢方向,此枚舉值支持邏輯與(&)和邏輯或(|)運算。

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

distance

number

最小拖動識別距離,單位為vp。

默認(rèn)值:5

說明:

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

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

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

PanDirection枚舉說明

名稱

描述

All

所有方向。

Horizontal

水平方向。

Vertical

豎直方向。

Left

向左拖動。

Right

向右拖動。

Up

向上拖動。

Down

向下拖動。

None

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

PanGestureOptions

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

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

參數(shù):

參數(shù)名稱

參數(shù)類型

必填

參數(shù)描述

fingers

number

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

默認(rèn)值:1

direction

PanDirection

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

默認(rèn)值:All

distance

number

最小滑動識別距離,單位為vp。

默認(rèn)值:5.0

說明:

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

接口

名稱

功能描述

setDirection(value: PanDirection)

設(shè)置direction屬性。

setDistance(value: number)

設(shè)置distance屬性。

setFingers(value: number)

設(shè)置fingers屬性。

事件

名稱

功能描述

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

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

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

Pan手勢移動過程中回調(diào)。

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

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

onActionCancel(event: () => void)

Pan手勢識別成功,接收到觸摸取消事件觸發(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)原點進(jìn)行移動
  21. // 左右拖動觸發(fā)該手勢事件
  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手勢事件觸發(fā)條件改為雙指以任意方向拖動
  40. this.panOption.setDirection(PanDirection.All)
  41. this.panOption.setFingers(2)
  42. })
  43. }
  44. }
  45. }

示意圖:

向左拖動:

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號