跳到主要內容
版本:v8

手勢

概觀

Ionic 手勢是一個工具,可讓開發人員以與平台無關的方式,為其應用程式建構自訂手勢和互動。開發人員不需要使用特定的框架,例如 React 或 Angular,甚至不需要建構 Ionic 應用程式!只要開發人員可以存取 Ionic Framework v5.0 或更高版本,他們就可以存取所有 Ionic 動畫。

建構複雜的手勢可能很耗時。其他提供自訂手勢的程式庫通常太過笨重,最終會捕獲滑鼠或觸控事件,而不讓它們傳播。這可能會導致其他元素無法再捲動或點擊。

安裝

使用 Ionic Core 和 JavaScript 的開發人員應安裝最新版本的 @ionic/core

import { createGesture } from 'https://cdn.jsdelivr.net/npm/@ionic/core@latest/dist/esm/index.mjs';

...

const gesture = createGesture({
el: elementRef,
threshold: 15,
gestureName: 'my-gesture',
onMove: ev => onMoveHandler(ev)
});

基本手勢

在此範例中,我們的應用程式會監聽 ion-content 元素上的手勢。當手勢移動開始時,會呼叫 onStart 函式,並在我們的 ion-card 中新增類別,以新增彩色框陰影。當偵測到手勢移動時,會呼叫 onMove 函式,而我們的應用程式會在 ion-card 中列印目前的手勢資訊。最後,當手勢移動結束時,會呼叫 onEnd 函式,並從我們的 ion-card 中移除自訂類別。

雙擊手勢

在以下範例中,我們希望能夠偵測元素上的雙擊。透過將我們的 threshold 設定為 0,我們可以確保我們的手勢物件可以偵測點擊。此外,我們定義了一個點擊閾值,以便只有快速連續發生的 2 次點擊才會算作雙擊。

手勢動畫

請參閱我們關於實作手勢動畫的指南:使用 Ionic 動畫的手勢動畫

類型

名稱
GestureCallback(detail: GestureDetail) => boolean | void

介面

GestureConfig

屬性類型預設值描述
elNodeundefined要監聽手勢的元素。
disableScrollboolean | undefinedfalse如果為 true,則在啟用手勢時,會在 el 上停用捲動。
direction'x' | 'y' | undefined'x'將手勢偵測限制為沿著特定軸的移動。
gestureNamestringundefined要建立的手勢名稱。
gesturePrioritynumber | undefined0優先順序較高的手勢會覆寫優先順序較低的手勢。適用於確保多個手勢彼此不會衝突。
passiveboolean | undefinedtrue如果為 true,這表示手勢永遠不會呼叫 preventDefault()。這可用於改善捲動效能。如需更多資訊,請參閱 被動監聽器
maxAnglenumber | undefined40偵測手勢時允許的最大角度。
thresholdnumber | undefined10定義指標必須移動多少才能開始手勢。
blurOnStartboolean | undefinedundefined如果為 true,則手勢會在觸發 onStart 回呼之前,模糊任何作用中的可選取元素,例如輸入或文字區域。
canStartGestureCallback | undefinedundefined如果允許開始手勢,則傳回 true 的回呼。
onWillStart(detail: GestureDetail) => Promise<void>undefined在即將開始手勢時觸發的回呼。這會在 canStart 之後,但在 onStart 之前觸發。
onStartGestureCallback | undefinedundefined在開始手勢時觸發的回呼。
onMoveGestureCallback | undefinedundefined在偵測到手勢移動時觸發的回呼。
onEndGestureCallback | undefinedundefined在手勢結束時觸發的回呼。這通常是指標已釋放時。
notCapturedGestureCallback | undefinedundefined在未捕獲手勢時觸發的回呼。這通常在有更高優先順序的衝突手勢時發生。

GestureDetail

屬性類型描述
typestring偵測到的手勢類型。
startXnumber手勢的起始 x 座標。
startYnumber手勢的起始 y 座標。
startTimeStampnumber開始手勢的時間戳記。
currentXnumber手勢的目前 x 座標。
currentYnumber手勢的目前 y 座標。
velocityXnumber手勢目前在 x 軸上的移動速度。
velocityYnumber手勢目前在 y 軸上的移動速度。
deltaXnumber自手勢開始以來,手勢在 x 軸上移動了多少。
deltaYnumber自手勢開始以來,手勢在 y 軸上移動了多少。
timeStampnumber手勢的目前時間戳記。
eventUIEvent瀏覽器分派的原生事件。如需更多資訊,請參閱 UIEvent
dataany | undefined使用者指定的任何資料。這可以在任何回呼函式中設定和讀取。

方法

enable(enable: boolean = true) => void

啟用或停用手勢。

destroy() => void

銷毀手勢實例並停止監聽目標元素。