TouchEvent
==========

**`TouchEvent`** インターフェイスは、タッチ感応面への接触状態が変化したときに発生する `UIEvent` を表します。この面は、例えばタッチ画面やトラックパッドです。このイベントは画面との 1 か所以上の接触を表すことが可能であり、また接触個所の移動、増加、減少などに対応することができます。

タッチは `Touch` オブジェクトで表されます。それぞれのタッチで位置、大きさと形状、圧力の量、対象要素を示します。タッチのリストは `TouchList` オブジェクトで表されます。

Event

UIEvent

TouchEventコンストラクター
--------

`TouchEvent()`

`TouchEvent` オブジェクトを生成します。

プロパティ
-----

*このインターフェイスは、親である `UIEvent` および `Event` からプロパティを継承しています。*

`TouchEvent.altKey` 読取専用 

タッチイベントが発生したときに alt キーが押下されていたかを示す論理値です。

`TouchEvent.changedTouches` 読取専用 

`TouchList` で、前回のタッチイベントと今回との間に接触状態が変化したそれぞれの接触点を表すすべての `Touch` オブジェクトです。

`TouchEvent.ctrlKey` 読取専用 

タッチイベントが発生したときに control キーが押下されていたかを示す論理値です。

`TouchEvent.metaKey` 読取専用 

タッチイベントが発生したときに meta キーが押下されていたかを示す論理値です。

`TouchEvent.shiftKey` 読取専用 

タッチイベントが発生したときに shift キーが押下されていたかを示す論理値です。

`TouchEvent.targetTouches`読取専用 

現在タッチ面に接触している、**かつ**イベントのターゲットと同じ要素でタッチを始めた `Touch` オブジェクトすべてで構成される `TouchList` です。

`TouchEvent.touches` 読取専用 

`TouchList` で、対象や状態の変化にかかわらず、この面における現在のすべての接触点を表すすべての `Touch` オブジェクトが入ります。

`TouchEvent.rotation` 
Non-standard
 読取専用 

イベントの開始以来の回転の変化 (角度) です。正の数は時計回りの回転です。負の数は逆時計回りの回転です。初期値は `0.0` です。

`TouchEvent.scale` 
Non-standard
 読取専用 

イベントの開始以来の 2 本の指の間の距離です。イベントの開始時における最初の指の間の距離に対する浮動小数点の倍数で表現します。 1.0 より小さな値は内側へのピンチ (ズームアウト) です。 1.0 より大きな値は外側へのピンチ (ズームイン) です。初期値は `1.0` です。

タッチイベントの種類
----------

タッチ関連の変化があったことを示すために発生するイベントは、数種類あります。イベントの `TouchEvent.type` プロパティを確認すると、何が発生したかを判断できます。

`touchstart`

ユーザーがタッチ面のタッチ点に触れたときに発生します。イベントのターゲットは、タッチが発生した場所の要素 (`Element`) です。

`touchend`

ユーザーがタッチ面からタッチ点を削除したとき (すなわち、指やスタイラスをタッチ面から離したとき) に発生します。これはタッチ点がタッチ面の端の外へ移動した場合にも発生します。例えば、ユーザーの指が画面の端よりも外に移動した場合です。

イベントのターゲットは、タッチ点が要素の外に移動した場合であっても、タッチ点に対応する `touchstart` イベントを受信したのと同じ要素 (`Element`) です。

タッチ面から削除されたタッチ点所 (複数の場合を含む) は、 `changedTouches` 属性で示される `TouchList` でわかります。

`touchmove`

ユーザがタッチ面でタッチ点を動かしたときに発生します。イベントのターゲットは、タッチ点が要素の外に移動した場合であっても、タッチ点に対応する `touchstart` イベントを受信したのと同じ要素 (`Element`) です。

このイベントはタッチ点の範囲、回転角、強さの属性が変化したときにも発生します。

**メモ:** `touchmove` イベントが発生する頻度はブラウザーごとに異なります。また、ユーザーのハードウェアの能力にも大きく依存するでしょう。特定のイベント粒度に依存してはいけません。

`touchcancel`

タッチ個所が何らかの方法で取り消されたときに発生します。このイベントが発生する理由はいくつか考えられます（正確な理由は端末ごと、およびブラウザーごとに異なるでしょう）。

* タッチを取り消す、ある種のイベントが発生した。これは、操作中にモーダルなアラートがポップアップした場合に発生するでしょう。
* タッチ個所がドキュメントウィンドウから外れて、ブラウザの UI 領域、プラグイン、あるいは他の外部コンテンツに移動した。
* スクリーンがサポートする個数より多くのタッチ個所にユーザがタッチすると、`TouchList` の中でもっとも古い `Touch` が取り消される。

### addEventListener() および preventDefault() の使用

重要なのは多くの場合、タッチイベントとマウスイベントの両方が送られることです (タッチに特化していないコードがユーザーと対話するため)。タッチイベントを使用する場合は、 `preventDefault()` を呼び出してマウスイベントが送信されないようにしてください。

Chrome のバージョン 56 以降 (デスクトップ版, Android 版 Chrome, Android WebView) は例外で、 `passive` オプションの `touchstart` および `touchmove` における既定値は `true` であり、 `preventDefault()` の呼び出しは効果がありません。この動作を変更するためには、`passive` オプションを `false` に設定します。そうすると `preventDefault()` が仕様書通りに動作します。リスナーを既定で `passive` と扱うことで、ユーザーがスクロール中にページのレンダリングがブロックされることを防いでいます。デモが Chrome Developer サイトにあります。

例
-

タッチイベントのメイン記事にある例をご覧ください。

仕様書
---

| Specification |
| --- |
| Touch Events # touchevent-interface |

ブラウザーの互換性
---------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

関連情報
----

* タッチイベント
* `GestureEvent` (en-US)