#タッチイベント
タッチ操作の概要
ブラウザのタッチ API は 3 つの部分で構成されます。
- タッチ:タッチポイント
- TouchList: 複数のタッチポイントのコレクション
- TouchEvent: タッチによってトリガーされるイベント インスタンス
「Touch」インターフェイスのインスタンス オブジェクトは、位置、サイズ、形状、圧力、ターゲット要素などの属性を含むタッチ ポイント (指またはタッチ ペン) を表すために使用されます。場合によっては、タッチ アクションが複数のタッチ ポイント (複数の指) で構成され、複数のタッチ ポイントのコレクションが TouchList インターフェイスのインスタンス オブジェクトによって表されます。 「TouchEvent」インターフェイスのインスタンス オブジェクトは、タッチによって引き起こされるイベントを表します。このタイプのイベントをトリガーできるのはタッチ スクリーンだけです。
多くの場合、現時点ではマウスが使用されていない場合でも、タッチ イベントとマウス イベントが同時にトリガーされます。これは、マウス イベントのみを定義し、タッチ イベントを定義しないコードがタッチ スクリーン上で動作できるようにするためです。この状況を回避したい場合は、event.preventDefault メソッドを使用して、マウス イベントが発行されないようにすることができます。
タッチインターフェイス
タッチインターフェースの概要
Touch インターフェイスは単一のタッチ ポイントを表します。タッチポイントは指であってもよいし、タッチペンであってもよい。
ブラウザーは、「Touch」インスタンスの生成に使用される「Touch」コンストラクターをネイティブに提供します。
var touch = 新しい Touch(touchOptions);
Touch コンストラクターは、次のプロパティを持つ構成オブジェクトをパラメーターとして受け入れます。
identifier: 必須。タイプは整数で、タッチ ポイントの一意の ID を表します。target: 必須。タイプは要素ノードで、タッチ ポイントが開始する Web ページ要素を示します。clientX: オプション。タイプは数値で、ブラウザ ウィンドウの左上隅を基準としたタッチ ポイントの水平距離を示します。デフォルトは 0 です。clientY: オプション。タイプは数値で、ブラウザ ウィンドウの左上隅を基準としたタッチ ポイントの垂直距離を示します。デフォルトは 0 です。screenX: オプション。タイプは数値で、画面の左上隅を基準としたタッチ ポイントの水平距離を示します。デフォルトは 0 です。screenY: オプション。タイプは数値で、画面の左上隅を基準としたタッチ ポイントの垂直距離を示します。デフォルトは 0 です。pageX: オプション。タイプは数値で、Web ページの左上隅を基準としたタッチ ポイントの水平位置 (つまり、ページのスクロール距離を含む) を示します。デフォルトは 0 です。pageY: オプション。タイプは数値で、Web ページの左上隅を基準としたタッチ ポイントの垂直位置を示します (つまり、ページのスクロール距離を含みます)。デフォルトは 0 です。radiusX: オプション。タイプは数値で、タッチ ポイントの周囲の影響を受ける楕円の X 軸半径を示します。デフォルトは 0 です。radiusY: オプション: タイプは、タッチ ポイントの周囲の影響を受ける楕円の Y 軸半径を示す数値です。デフォルトは 0 です。rotationAngle: オプション。タイプは数値で、タッチ領域内の楕円の回転角度を示します。単位は度で、0 ~ 90 度の範囲で、デフォルト値は 0 です。force: オプション。タイプはタッチ圧力を示す0から1までの範囲の数値です。 「0」は圧力がないことを表し、「1」はハードウェアによって認識される最大圧力を表し、デフォルトは「0」です。
タッチインターフェイスのインスタンスプロパティ
(1)タッチ識別子
Touch.identifier プロパティは、タッチ ポイントの一意の ID を表す整数を返します。この値は、タッチ イベントが終了するまで、タッチ プロセスを通じて変更されません。
someElement.addEventListener('touchmove', function (e) {
for (var i = 0; i < e.changedTouches.length; i++) {
console.log(e.changedTouches[i].identifier);
}
}、 間違い);
(2)Touch.screenX、Touch.screenY、Touch.clientX、Touch.clientY、pageX、pageY
Touch.screenX プロパティと Touch.screenY プロパティは、ページがスクロールされているかどうかに関係なく、画面の左上隅を基準としたタッチ ポイントの横座標と縦座標をそれぞれ表します。
Touch.clientX プロパティと Touch.clientY プロパティは、ページがスクロールされているかどうかに関係なく、ブラウザのビューポートの左上隅を基準としたタッチ ポイントの横座標と縦座標をそれぞれ表します。
Touch.pageX プロパティと Touch.pageY プロパティはそれぞれ、現在のページの左上隅を基準としたタッチ ポイントの横座標と縦座標を表します。これには、ページのスクロールによって生じる変位も含まれます。
(3)Touch.radiusX、Touch.radiusY、Touch.rotationAngle
Touch.radiusX プロパティと Touch.radiusY プロパティは、タッチ ポイントを中心とした影響を受ける楕円の X 軸半径と Y 軸半径をそれぞれピクセル単位で返します。 2 を掛けると、タッチ範囲の幅と高さが得られます。
Touch.rotationAngle プロパティは、タッチ領域内の楕円の回転角度を 0 度から 90 度までの度数で表します。
上記の 3 つの属性は、ユーザーが画面に接触している領域を共同で定義します。これは、指などの不正確なタッチを説明するのに非常に役立ちます。指先が画面に触れると、タッチ範囲は楕円を形成します。この楕円領域を表すために、次の 3 つの属性が使用されます。
ここに例を示します。
div.addEventListener('タッチスタート', 回転);
div.addEventListener('touchmove', 回転);
div.addEventListener('タッチエンド', 回転);
関数回転(e) {
var touch = e.changedTouches.item(0);
e.preventDefault();
src.style.width = touch.radiusX * 2 + 'px';
src.style.height = touch.radiusY * 2 + 'px';
src.style.transform = 'rotate(' + touch.rotationAngle + 'deg)';
};
(4)タッチフォース
「Touch.force」プロパティは、タッチの圧力を示す「0」から「1」までの値を返します。 「0」は圧力がないことを表し、「1」はハードウェアによって認識される最大圧力を表します。
(5)タッチターゲット
Touch.target プロパティは、タッチが発生した要素ノードを表す要素ノードを返します。このプロパティは、タッチ ポイントがこのノードから離れた場合でも変更されません。
タッチリストインターフェイス
TouchList インターフェイスはタッチ ポイントのコレクションを表します。そのインスタンスは配列状のオブジェクトで、そのメンバーはすべてのタッチ ポイントを表す Touch のインスタンス オブジェクトです。ユーザーが 3 本の指でタッチすると、生成された TouchList インスタンスには 3 つのメンバーが含まれ、各指のタッチ ポイントが 1 つの Touch インスタンス オブジェクトに対応します。
そのインスタンスは主に、タッチ イベントの TouchEvent.touches、TouchEvent.changedTouches、および TouchEvent.targetTouches プロパティを通じて取得されます。
インスタンス プロパティとインスタンス メソッドは 2 つだけです。
TouchList.length: メンバーの数 (つまり、タッチ ポイントの数) を示す数値。TouchList.item(): 指定された位置のメンバーを返します。そのパラメータはメンバーの位置番号 (0 から始まります) です。
TouchEvent インターフェース
概要
TouchEvent インターフェイスは Event インターフェイスから継承し、通常はタッチ スクリーンまたはトラックパッドからのタッチによってトリガーされるイベント インスタンスを表します。継承されたプロパティに加えて、独自のプロパティがいくつかあります。
ブラウザーは、タッチ イベントのインスタンスを生成するための TouchEvent() コンストラクターをネイティブに提供します。
new TouchEvent(タイプ、オプション)
TouchEvent() コンストラクターは 2 つのパラメーターを受け入れることができます。最初のパラメーターはイベントの種類を示す文字列であり、2 番目のパラメーターはイベントの設定オブジェクトです。このパラメーターはオプションであり、オブジェクトのすべてのプロパティもオプションです。 。 「Event」インターフェースの構成プロパティに加えて、このインターフェースには独自の構成プロパティがいくつかあります。
touches: 現在アクティブなすべてのタッチ ポイントを表すTouchListインスタンス。デフォルト値は空の配列[]です。targetTouches:TouchListインスタンス。タッチされたターゲット要素ノード内にあり、まだアクティブなすべてのタッチ ポイントを表します。デフォルト値は空の配列[]です。changedTouches: このタッチ イベントの関連タッチ ポイントを表すTouchListインスタンス。デフォルト値は空の配列[]です。ctrlKey: Ctrl キーが同時に押されたかどうかを示すブール値。デフォルト値はfalseです。shiftKey: Shift キーが同時に押されたかどうかを示すブール値。デフォルト値はfalseです。altKey: Alt キーが同時に押されたかどうかを示すブール値。デフォルト値はfalseです。metaKey: Meta キー (または Windows キー) が同時に押されたかどうかを示すブール値。デフォルト値はfalseです。
インスタンスのプロパティ
TouchEvent インターフェイスのインスタンスには、「Event」 インスタンスのすべてのプロパティとメソッドに加えて、独自のインスタンス プロパティの一部があり、それらはすべて読み取り専用です。
(1) TouchEvent.altKey、TouchEvent.ctrlKey、TouchEvent.shiftKey、TouchEvent.metaKey
TouchEvent.altKey: タッチ時に Alt キーが押されたかどうかを示すブール値。TouchEvent.ctrlKey: タッチ時に Ctrl キーが押されたかどうかを示すブール値。TouchEvent.shiftKey: ブール値: タッチ時に Shift キーが押されたかどうかを示します。TouchEvent.metaKey: タッチ時に Meta キー (または Windows キー) が押されたかどうかを示すブール値。
ここに例を示します。
someElement.addEventListener('touchstart', function (e) {
console.log('altKey = ' + e.altKey);
console.log('ctrlKey = ' + e.ctrlKey);
console.log('metaKey = ' + e.metaKey);
console.log('shiftKey = ' + e.shiftKey);
}、 間違い);
(2)TouchEvent.changedTouches
TouchEvent.changedTouches プロパティは、TouchList インスタンスを返します。そのメンバーは、このタッチ イベントの関連タッチ ポイントを表す Touch インスタンス オブジェクトのグループです。
この属性は、時間ごとに異なる意味を持ちます。
touchstartイベント: アクティブ化されたタッチポイントtouchmoveイベント: 変更されたタッチポイントtouchendイベント: 消えるタッチポイント (つまり、タッチされなくなったポイント)
ここに例を示します。
someElement.addEventListener('touchmove', function (e) {
for (var i = 0; i < e.changedTouches.length; i++) {
console.log(e.changedTouches[i].identifier);
}
}、 間違い);
(3)TouchEvent.touches
TouchEvent.touches プロパティは、メンバーがすべてまだアクティブな (つまり、接触している) タッチ ポイントである TouchList インスタンスを返します。一般的に言えば、指はタッチポイントです。
ここに例を示します。
someElement.addEventListener('touchstart', function (e) {
switch (e.touches.length) {
// 指一本タッチ
ケース 1: handle_one_touch(e);
// 2 本指タッチ
ケース 2: handle_two_touches(e);
// 3本指タッチ
ケース 3: handle_three_touches(e);
// その他の状況
デフォルト: console.log('サポートされていません');
}
}、 間違い);
(4)TouchEvent.targetTouches
TouchEvent.targetTouches プロパティは、タッチ イベントのターゲット要素ノード内でまだアクティブな (つまりタッチされている) タッチ ポイントをすべてメンバーとする TouchList インスタンスを返します。
関数 touch_in_target(ev) {
return (ev.touches.length === ev.targetTouches.length ? true : false);
}
上記のコードは、すべてのタッチ ポイントがターゲット要素内にあるかどうかを判断するために使用されます。
タッチイベントの種類
タッチによるイベントには以下の種類があります。どのようなイベントが発生したかは「TouchEvent.type」プロパティで確認できます。
touchstart: ユーザーがタッチを開始するとトリガーされ、そのtargetプロパティはタッチが発生した要素ノードを返します。touchend: ユーザーがタッチ スクリーンに触れなくなったとき (または画面の端から移動したとき) にトリガーされます。そのtarget属性は、タッチが開始された要素ノードであるtouchstartイベントと一致します。 。そのchangedTouchesプロパティは、タッチされなくなったすべてのタッチ ポイントを含むTouchListインスタンス (つまり、Touchインスタンス オブジェクト) を返します。touchmove: ユーザーがタッチ ポイントを移動するとトリガーされ、そのtarget属性はtouchstartイベントと一致します。このイベントは、タッチの半径、角度、強さが変化した場合にもトリガーされます。touchcancel: タッチ ポイントがキャンセルされた場合、たとえば、タッチ エリアにモーダル ウィンドウがポップアップした場合、タッチ ポイントがドキュメント エリアから離れた場合 (ブラウザのメニュー バーに入った場合)、ユーザーのタッチ ポイントが多すぎて超過した場合にトリガーされます。サポートされている制限値 (以前のタッチ ポイントは自動的にキャンセルされます)。
以下に例を示します。
var el = document.getElementsByTagName('canvas')[0];
el.addEventListener('タッチスタート', handleStart, false);
el.addEventListener('touchmove', handleMove, false);
関数 handleStart(evt) {
evt.preventDefault();
var touch = evt.changedTouches;
for (var i = 0; i < touchs.length; i++) {
console.log(touches[i].pageX, touchs[i].pageY);
}
}
関数 handleMove(evt) {
evt.preventDefault();
var touch = evt.changedTouches;
for (var i = 0; i < touchs.length; i++) {
var touch = touch[i];
console.log(touch.pageX, touch.pageY);
}
}
作者: wangdoc
アドレス: https://wangdoc.com/
ライセンス: クリエイティブ・コモンズ 3.0