ジェスチャー
概要
Ionic ジェスチャーは、開発者がプラットフォームに依存しない方法で、アプリケーションのカスタムジェスチャーとインタラクションを構築できるようにするユーティリティです。開発者は、ReactやAngularのような特定のフレームワークを使用する必要はなく、Ionicアプリを構築する必要すらありません!開発者がIonic Frameworkのv5.0以降にアクセスできる限り、すべてのIonicアニメーションにアクセスできます。
複雑なジェスチャーを構築するには時間がかかる場合があります。カスタムジェスチャーを提供する他のライブラリは、多くの場合、過度に重く、マウスまたはタッチイベントをキャプチャして伝播させないことがあります。これにより、他の要素がスクロールやクリックできなくなる可能性があります。
インストール
- JavaScript
- Angular
- Angular (スタンドアロン)
- React
- Vue
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)
});
Ionic CoreとTypeScriptを使用する開発者は、@ionic/coreの最新バージョンをインストールする必要があります。
import { createGesture, Gesture } from '@ionic/core';
...
const gesture: Gesture = createGesture({
el: elementRef,
threshold: 15,
gestureName: 'my-gesture',
onMove: ev => onMoveHandler(ev)
});
Angularを使用する開発者は、@ionic/angularの最新バージョンをインストールする必要があります。アニメーションは、AnimationControllerの依存性注入によって作成できます。
デフォルトでは、ジェスチャーコールバックはNgZone内では実行されません。開発者は、ジェスチャーを作成するときにrunInsideAngularZoneパラメーターをtrueに設定するか、コールバックをNgZone.run()呼び出しでラップできます。
import { Gesture, GestureController } from '@ionic/angular';
...
constructor(private gestureCtrl: GestureController) {
const gesture: Gesture = this.gestureCtrl.create({
el: this.element.nativeElement,
threshold: 15,
gestureName: 'my-gesture',
onMove: ev => this.onMoveHandler(ev)
}, true);
// The `true` above ensures that callbacks run inside NgZone.
}
Angularを使用する開発者は、@ionic/angularの最新バージョンをインストールする必要があります。アニメーションは、AnimationControllerの依存性注入によって作成できます。
デフォルトでは、ジェスチャーコールバックはNgZone内では実行されません。開発者は、ジェスチャーを作成するときにrunInsideAngularZoneパラメーターをtrueに設定するか、コールバックをNgZone.run()呼び出しでラップできます。
import { Gesture, GestureController } from '@ionic/angular/standalone';
...
constructor(private gestureCtrl: GestureController) {
const gesture: Gesture = this.gestureCtrl.create({
el: this.element.nativeElement,
threshold: 15,
gestureName: 'my-gesture',
onMove: ev => this.onMoveHandler(ev)
}, true);
// The `true` above ensures that callbacks run inside NgZone.
}
Reactを使用する開発者は、@ionic/reactの最新バージョンをインストールする必要があります。完全なReactラッパーは近日公開予定です!
import { createGesture, Gesture } from '@ionic/react';
...
const gesture: Gesture = createGesture({
el: elementRef,
threshold: 15,
gestureName: 'my-gesture',
onMove: ev => onMoveHandler(ev)
});
Ionic Vueを使用する開発者は、@ionic/vueの最新バージョンをインストールする必要があります。
import { createGesture } from '@ionic/vue';
import { ref } from 'vue';
...
const elementRef = ref();
...
const gesture = createGesture({
el: elementRef.value,
threshold: 15,
gestureName: 'my-gesture',
onMove: ev => onMoveHandler(ev)
});
基本的なジェスチャー
この例では、アプリはion-content要素のジェスチャーをリッスンします。ジェスチャーの動きが開始されると、onStart関数が呼び出され、色付きのボックスシャドウを追加するためにion-cardにクラスが追加されます。ジェスチャーの動きが検出されると、onMove関数が呼び出され、アプリはion-card内に現在のジェスチャー情報を出力します。最後に、ジェスチャーの動きが終了すると、onEnd関数が呼び出され、カスタムクラスがion-cardから削除されます。
ダブルクリックジェスチャー
以下の例では、要素でのダブルクリックを検出できるようにする必要があります。thresholdを0に設定することで、ジェスチャーオブジェクトがクリックを検出できるようにします。さらに、ダブルクリックとしてカウントされるために連続して発生する必要があるクリックのしきい値を定義します。
ジェスチャーアニメーション
ジェスチャーアニメーションの実装に関するガイドをご覧ください:Ionicアニメーションを使用したジェスチャーアニメーション
型
| 名前 | 値 |
|---|---|
GestureCallback | (detail: GestureDetail) => boolean | void |
インターフェース
GestureConfig
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
| el | Node | 未定義 | ジェスチャーをリッスンする要素。 |
| disableScroll | boolean | undefined | false | trueの場合、ジェスチャーが有効になっている間、elでのスクロールが無効になります。 |
| direction | 'x' | 'y' | undefined | 'x' | 特定の軸に沿った動きにジェスチャー検出を制限します。 |
| gestureName | string | 未定義 | 作成するジェスチャーの名前。 |
| gesturePriority | number | undefined | 0 | 優先度が高いジェスチャーは、優先度が低いジェスチャーを上書きします。複数のジェスチャーが互いに衝突しないようにするのに役立ちます。 |
| passive | boolean | undefined | true | trueの場合、これはジェスチャーがpreventDefault()を呼び出さないことを示します。これは、スクロールパフォーマンスを向上させるために使用できます。詳細については、パッシブリスナーを参照してください。 |
| maxAngle | number | undefined | 40 | ジェスチャーを検出するときに許可する最大角度。 |
| threshold | number | undefined | 10 | ジェスチャーが開始される前にポインターが移動する必要がある量を定義します。 |
| blurOnStart | boolean | undefined | 未定義 | trueの場合、ジェスチャーは、onStartコールバックをトリガーする前に、入力やテキストエリアなどのアクティブな選択可能な要素をぼかします。 |
| canStart | GestureCallback | undefined | 未定義 | ジェスチャーを開始できる場合にtrueを返すコールバック。 |
| onWillStart | (detail: GestureDetail) => Promise<void> | 未定義 | ジェスチャーが開始されようとしているときにトリガーされるコールバック。これはcanStartの後、onStartの前にトリガーされます。 |
| onStart | GestureCallback | undefined | 未定義 | ジェスチャーが開始されたときにトリガーされるコールバック。 |
| onMove | GestureCallback | undefined | 未定義 | ジェスチャーの動きが検出されたときにトリガーされるコールバック。 |
| onEnd | GestureCallback | undefined | 未定義 | ジェスチャーが終了したときにトリガーされるコールバック。これは通常、ポインターがリリースされたときです。 |
| notCaptured | GestureCallback | undefined | 未定義 | ジェスチャーがキャプチャされなかったときにトリガーされるコールバック。これは通常、優先度が高い競合するジェスチャーがある場合に発生します。 |
GestureDetail
| プロパティ | 型 | 説明 |
|---|---|---|
| type | string | 検出されたジェスチャーのタイプ。 |
| startX | number | ジェスチャーの開始x座標。 |
| startY | number | ジェスチャーの開始y座標。 |
| startTimeStamp | number | ジェスチャーが開始されたタイムスタンプ。 |
| currentX | number | ジェスチャーの現在のx座標。 |
| currentY | number | ジェスチャーの現在のy座標。 |
| velocityX | number | ジェスチャーが現在x軸上で移動している速度。 |
| velocityY | number | ジェスチャーが現在y軸上で移動している速度。 |
| deltaX | number | ジェスチャーが開始されてからx軸上で移動した量。 |
| deltaY | number | ジェスチャーが開始されてからy軸上で移動した量。 |
| timeStamp | number | ジェスチャーの現在のタイムスタンプ。 |
| event | UIEvent | ブラウザによってディスパッチされたネイティブイベント。詳細については、UIEventを参照してください。 |
| data | any | undefined | ユーザーが指定した任意のデータ。これは、任意のコールバックで設定および読み取ることができます。 |
メソッド
enable(enable: boolean = true) => void
ジェスチャーを有効または無効にします。
destroy() => void
ジェスチャーインスタンスを破棄し、ターゲット要素でのリッスンを停止します。