81

ライブラリのいくつかをタッチ デバイスで動作させようとしていますが、それらがどのようにサポートされ、どのように機能するかを理解するのに苦労しています。

基本的にタッチイベントは5つあるのですが、モバイルブラウザではイベントだけでコンセンサスが取れているようですtouchstart(当たり前)。テストケースとしてフィドルを作成しました。

Android 4 を搭載した Galaxy Note でこれをテストしましたが、デスクトップ ブラウザでもリンクを確認できます。

目標は、タップ、ダブルタップ、ロングタップの処理方法を理解することです。派手なものはありません。

基本的には、次のようになります。

Android ストック ブラウザはタッチ イベントを発生させません。mousedownタップ、発火、mouseupおよびイベントを連続して使用してマウスクリックをエミュレートしようとしますがclick、ダブルタップはページをズームインおよびズームアウトするだけです。

Chrome for Android は、指が画面に触れると touchstart イベントを発生させます。すぐにリリースされるとmousedown、 、mouseuptouchendおよび最後にclickイベントが発生します。

ロング タップの場合、約 0.5 秒後に と が発火mousedownmouseuptouchend指を離すとclick、最後にイベントは発生しません。

指を動かすと、touchmoveイベントが数回発生し、その後イベントが発生しますtouchcancelが、その後は何も起こりませんtouchend。指を離してもイベントは発生しません。

ダブルタップするとズームイン/ズームアウト機能がトリガーされますが、イベントごとにコンボが発生します.2touchstarttouchevent、マウスイベントは発生しません。

Android 版Firefoxはイベントを正しく起動し、touchstart短いタップの場合はmousedownmouseuptouchendおよびclickその後に起動します。

ロングタップの場合は発火mousedownし、mouseup最後にtouchendイベント。これらはChromeと同じです。

しかし、指を動かした場合、 if はtouchmove(予想どおり) 継続的に発生しますが、指がイベント リスナーを使用して要素を離れたときにイベントを発生させず指がブラウザーのビューポートから出たときにイベントを発生させません。 .touchleavetouchcancel

ダブルタップの場合、Chrome と同じように動作します。

Opera Mobileは、短いタップで Chrome や Firefox と同じことを行いますが、長押しすると、無効にしたい共有機能がアクティブになります。指を動かしたり、ダブルタップしたりすると、Firefox と同じように動作します。

Chrome ベータ版は短いタップに対しては通常どおり行いますが、長いタップの場合はイベントを発生させず、0.5 秒後、指を離したときにmouseupイベントを発生させます。指を動かすと、Firefox や Opera Mobile のように動作するようになりました。touchstartmousedowntouchend

ダブルタップの場合、ズームアウト時にはタッチイベントを発生させず、ズームイン時にのみ発生させます。

Chrome ベータ版は最も奇妙な動作を示しますが、ベータ版なので文句は言えません。

問題は、タッチ デバイスの最も一般的なブラウザで、短いタップ、長いタップ、およびダブル タップを検出するための簡単な方法があるかどうかです。

残念ながら、Safari を搭載した iOS デバイスや Windows Phone 7/Phone 8/RT 用の IE でテストすることはできません。

4

4 に答える 4

9

非常に優れたリソースhttps://patrickhlauke.github.io/touch/tests/results/があり、驚異的な数のブラウザーにわたるイベントの順序を詳しく説明しています。また、定期的に更新されているようです (2016 年 9 月、最終更新は 2016 年 8 月)。

要点は、基本的にすべてのトリガーmouseoverと関連するイベントです。ほとんどの場合、タッチ イベントもトリガーされます。通常、タッチ イベントは完了 (到達touchend) しmouseoverてから継続しclickます (ページ コンテンツの変更によってこれがキャンセルされない限り)。これらの厄介な例外は、ありがたいことに比較的まれです (サードパーティの Android ブラウザーと Blackberry Playbook)。

そのリンクされたリソースは、非常に詳細なレベルに達しています。これは、非常に多くのオペレーティング システム、デバイス、およびブラウザー テストの最初の 3 つのサンプルです。

ここに画像の説明を入力

要点のいくつかを要約すると、次のようになります。

モバイル ブラウザ

  • リストされているすべてのブラウザーmouseoverは、最初のタップでトリガーされます。2 回目のタップでトリガーされるのは、一部の Windows Phone ブラウザーのみです。
  • すべてのトリガーclick。ページを変更したclick場合にどのキャンセルを指定するかは指定されていません(ほとんどの場合はそうすると思います)。mouseover
  • ほとんどのブラウザは と のmouseovertouchstartにトリガーしtouchendます。これには、iOS7.1 Safari、ストック Android、Chrome、Android 用 Opera および Firefox、および一部 (すべての Windows Phone ブラウザーではありません) が含まれます。
  • いくつかの Windows Phone ブラウザー (すべての Windows 8 / 8.1 および 10 用の 1 つのバージョン) といくつかのサードパーティ Android ブラウザー (Dolphin、Maxathon、UC) がと のmouseover touchstartにトリガーされtouchendます。
  • mouseoverとの間touchstartでトリガーされる Blackberry Playbook のみtouchend
  • Opera Mini と Puffin (サードパーティの Android ブラウザ) のみtouchstart、 またはがありませんtouchend

デスクトップ ブラウザ

  • デスクトップの Chrome と Opera の最新バージョンは、モバイル版と同じように動作しtouchstarttouchendその後にmouseover.
  • touchstartFirefox および Microsoft ブラウザー (IE <=11 および多くのバージョンの Edge) は、touchendイベントをトリガーしません。
  • Mac に関するデータはありませんが、Mac のタッチスクリーン インターフェイスが不足していることを考えるtouchstartと、おそらく Ma ブラウザはサポートされていません。touchend

また、支援技術と組み合わせたブラウザーには、信じられないほどの量のデータがあります。

于 2016-09-13T18:51:57.213 に答える
3

はい、タイマーを開始しtouchstartて終了しtouchend、そこから選択できます。

また、スワイプするtouchmoveと、「指」の座標を取得して、トリガーされる前にどれだけ移動したかを確認できますtouchend

タッチイベントライブラリを使用するよりも簡単な方法があるかどうかはわかりませんが、単純な「タップ」、「ダブルタップ」、「スワイプ」イベント用に簡単に作成できると思います。

于 2013-01-23T18:34:59.543 に答える
3

これは、Android 4.3 でのタッチ イベントとマウス イベントに関する私の最新の観察結果です。

Opera、Firefox、および Chrome は標準的な動作をしているようです

  1. スワイプ時 (touchstart-touchmove-touchend):

    1. マウス イベント (マウスオーバーを除く) は発生しません。
    2. マウスオーバーは、同じ要素で touchstart と touchend が発生した場合にのみ発生します。(タッチスタート-タッチムーブ-タッチエンド-マウスオーバー)
    3. タッチスタートでデフォルトが禁止されている場合: デフォルトのスワイプ動作は機能しません。マウス イベントの発生に関しては変更はありません。
  2. オンタップ(touchstart-touchend):

    1. すべてのマウス イベント mouseover-mousemove-mousedown-mouseup-click は、遅延後に発生します
    2. タッチスタートでデフォルトが禁止されている場合: マウスオーバーのみが発生します。

Android の既定のブラウザーには、非標準の動作がいくつかあります

  1. マウスオーバーはタッチスタートの前に発生します。つまり、マウスオーバーは常に発生します。
  2. タッチスタートでデフォルトが禁止されていても、すべてのマウスイベントはタップで発生します。
于 2013-12-18T15:19:38.440 に答える