調査結果をiOS6.0(iPhone 5)、iOS5.1.1(iPad 3)、Android4.2.1のNexus7(Chrome 18.0.1025469)、およびNexus7のAndroid17用Firefoxに以下に投稿します。
現在、iPhone5からのデータしかありません。これは大変な作業です。
私がしたことは、スクロールを防ぐために、ページとtouchstart
呼び出しで2つの要素を作成することでした。preventDefault()
次にtouchmove
、そのバッファの長さをカウントし、それchangedTouches
をtargetTouches
DOMに表示しました。さらに、イベントが発生した割合をカウントしました。コードのスニペットは次のとおりです。
// exposed is a variable which other code uses rAF to present a representation of it on the DOM so I can view it
touchmove: function(evt) {
evt.preventDefault();
var time = Date.now();
var diff = time - exposed.touch_move_last_time;
if (!exposed.touch_move_last_time) exposed.touch_move_last_time = Date.now();
if (!exposed.touch_move_rate) exposed.touch_move_rate = 0;
exposed.touch_move_last_time = time;
exposed.touch_move_rate += (diff - exposed.touch_move_rate)*0.01;
exposed.touch_move_changedTouches_count = evt.changedTouches.length;
exposed.touch_move_targetTouches_count = evt.targetTouches.length;
指を動かすときは、ジグザグではなく円を描くように動かします。これは、ジグザグポイントでは、サンプルレートよりも発生するイベントが少ないためです。収束率が低いため(これは変動し続けない数値を生成するためです)、読み取り値がサンプルレートで安定するまで、約5秒の継続的な摩擦が必要です。
iOS6.0:
1つの要素に2本の指を置き、1本の指を動かします:
changedTouches
サイズ:1(動くもの)
targetTouches
サイズ:2(要素上の2本の指)
サンプルレート:16.66ms
1つの要素に2本の指を置き、両方を動かします:
changedTouches
サイズ:2(両方が動いています)
targetTouches
サイズ:2(要素上の2本の指)
サンプルレート:16.66ms
各要素に1本の指を置き、1本の指を動かします:
changedTouches
サイズ:1(動くもの)
targetTouches
サイズ:1(動くものが最初に触れた要素を指します)
サンプルレート:16.66ms
各要素に1本の指を置き、両方の指を動かします。
changedTouches
サイズ:1(動くもの)
targetTouches
サイズ:1(動くものが最初に触れた要素を指します)
サンプルレート:8.29ms
最初の要素に1本の指を置き、2番目の要素に2本の指を置きます:2番目の要素
で1本の指を動かす場合
changedTouches
サイズ:1
targetTouches
サイズ:2
サンプルレート:16.66ms
2番目の要素で両方の指を動かす場合
changedTouches
サイズ:2
targetTouches
サイズ:2
サンプルレート:16.6ms(最初の指を動かさないようにするのは非常に困難です)
最初の要素で指を動かす場合
changedTouches
サイズ:1
targetTouches
サイズ:1
サンプルレート:16.66ms
最初の要素で指を動かし、2番目の要素で1本の指を動かす場合
changedTouches
サイズ:1
targetTouches
サイズ:1から2の間で変動する
サンプルレート:8.29ms
3本の指すべてを動かす場合
changedTouches
サイズ:1と2の間で変動し
targetTouches
ますサイズ:2サンプルレート:約8.3ms
各要素に2本の指を置き、各要素に1本ずつ移動します。
changedTouches
サイズ:1
targetTouches
サイズ:2
サンプルレート:約9ms
サンプルレートが約120Hzのすべてのケースで、指が動いている要素が少なくとも2つあったことは明らかです。これは、touchmove
同時に接触した要素ごとに別々に発火することを明確に示しているようです。テストを3つの要素に拡張すると、180Hzのサンプルレートが得られると思います。更新:iPadで3つの要素をテストしましたが、5.4ミリ秒の読み取り値が生成されます。
私にとって少し不思議なのは、なぜ私が常に8.33msではなく8.29msを正確に取得するのかということです。9msの読み取りは、おそらくフルスピードで処理できるよりも処理が多いためです(フレームごとにDOMを更新しているため)
別の更新:
Nexus 7のChromeでは、読み取り値は常に1回のタッチごとに変化するchangedTouches
ため、バッファは常にすべてのタッチで満たされているように見えます。webkitForce
また、非常に遅いため、サンプルレートの読み取りでは有用な情報がゼロになります。しかし、ページの最後に順序付けられた要素に存在する指の数を変更することにより、touchmove
イベントも要素ごとに正しく発生しているように見えます。
Nexus 7上のFirefoxは、妥当なサンプルレートの読み取り値を生成するのに少し優れていますが、ディスプレイの更新はChromeよりもさらに遅くなります。Firefoxの途切れが少なくなるまで、コードを正しく動作させるために努力する価値はないと思います。