2011-08-25 3 views
44

私は、モバイルデバイスからすべてのtouchendイベントをキャッチした場合:touchendイベントプロパティ

$(document.body).bind('touchend', function (e) { 
var touch = e.touches[0]; // doesnt work 
... 

Iは、E PARAMTERからtouch.screenX、touch.screenY、touch.clientXとtouch.clientXを取得する必要があります。私が見たすべての例は、e.touchesがコレクションになることを示唆しており、e.touches[0]でタッチの詳細を得ることができます。私のipadでのテストでは、e.touchesは常に定義されていません。 jqueryプラグインを使用していません。

また、未定義のe.targetTouchesも試しました。

誰でも手助けできますか?

答えて

96

は実際に、タッチがchangedTouches配列、すなわちに記載されています発表しました。

あなたがここにchangedTouchesの詳細を読むことができます: http://www.w3.org/TR/touch-events/#changedtouches-of-a-touchevent

+4

はこれが受け入れ答えではないでしょうか?投票してください! –

+0

私は同意する、これは正しい解決策です。私は、必要なデータよりも多くのAPIを混ぜる必要があるため、私は自分自身にこのデータを使用しています。 –

+2

jQueryを使用している場合、アンドロイドには当てはまりません。 $( '#test')。( 'touchend'、function(evt){console.log(evt.changedTouches);});あなたが$( '#test')を実行した場合と同じですが、バインド( 'touchend' ...しかし、jQueryを式から削除してgetElementByとaddEventListenerを実行すると、それは動作します.. – WORMSS

10

touchesプロパティはTouchListオブジェクトです。 TouchListクラスリファレンスhereが表示されます。

あなたは#log divの上でこの例のコードとのlengthプロパティを監視する場合:touchstartとtouchmoveを実行しながら、0はtouchendを実行するときに

$('#element').bind('touchstart', function(event) 
{ 
    $('#log').append(event.originalEvent.touches.length+'<br/>'); 
}); 

$('#element').bind('touchmove', function(event) 
{ 
    $('#log').append(event.originalEvent.touches.length+'<br/>'); 
}); 

$('#element').bind('touchend', function(event) 
{ 
    $('#log').append(event.originalEvent.touches.length+'<br/>'); 
}); 

あなたは1を取得します。そのため、e.touches[0]から未定義を取得します。私は、これは少しより信頼性の高いoriginalEventプロパティを経由するよりもあると思い

e.changedTouches[0].pageX // get the end x page coordinate for a released touch

関連する問題