iPhoneでタッチスタートイベントとタッチエンドイベントで遊んでいます。divを含むサンプルページを作成しました。これをタッチしてページをスクロールすると、開始位置と終了位置のy座標が返されます。
リンク: http: //jsbin.com/ibemom/2
jQuery:
var touchStartPos;
$('.theDiv')
.bind('touchstart', function(e){
touchStartPos = e.pageY;
})
.bind('touchend', function(e){
alert(touchStartPos + ' | ' + e.pageY)
})
ただし、そのページをiPhoneにロードすると、アラートは両方の値をゼロとして報告し続けます。誰かが私が持っているものに何か問題があるのを見ますか?
アップデート:
jQuery Mobileプロジェクトでこのコードに出くわしました:https ://github.com/jquery/jquery-mobile/issues/734
それからのコメントが突き出ました:
// (in iOS event.pageX and event.pageY are always 0 )
なぜそうなのかはわかりませんが、少なくとも同じことを見ている人を見つけました。そのページのサンプルコードを掘り下げて、解決策があるかどうかを確認します。
更新II:
上記のリンクのサンプルコードを確認すると、実際の値が返されるように見えます。
e.originalEvent.touches[0].pageY
キャッチは、私は今、それが私が完全に必要としているわけではないことに気づきました。これは、ブラウザウィンドウではなく、イベントをHTMLドキュメントに関連して添付したオブジェクト内でタッチした領域のYオフセットを返します。
私の目標は、タッチが画面のどこから始まり、どこで終わったかを把握し、値を比較することです。それらがかなり異なる場合は、タッチではなく、スワイプが実行されたと見なします。
更新III:
私はこれらの例への参照も見つけています:
e.originalEvent.touches[0].pageX
event.targetTouches[0].pageY
私もそれらを機能させることができないようですが。どちらも未定義のエラーを返します。
更新IV:
1つの解決策は、ドキュメント自体のoffset()を追跡することのようです。ドキュメントにタッチエンドイベントを適用して、オフセットを確認できます。
これに伴う問題は、タッチエンドイベントが最初にページ上の要素でトリガーされ、次にドキュメントで発生することです(バブリング)。そのため、オブジェクトのタッチエンドイベントで何をするかを理解する必要がある前に、それがタッチであるかスワイプであるかを実際に判断することはできません。
まだこれを熟考しています...