2011-08-25 9 views
44

अगर मैं के साथ मोबाइल उपकरणों से सभी touchend घटनाओं को पकड़ने:touchend घटना गुण

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

मैं ई पैरामीटर से touch.screenX, touch.screenY, touch.clientX और touch.clientX प्राप्त करने की आवश्यकता। मैंने देखा है कि सभी उदाहरणों से पता चलता है कि e.touches एक संग्रह होगा, और आप e.touches[0] के साथ स्पर्श विवरण प्राप्त कर सकते हैं। आईपैड पर मेरे परीक्षणों में, e.touches हमेशा अपरिभाषित है। मैं किसी भी jquery प्लगइन्स का उपयोग नहीं कर रहा हूँ।

ने e.targetTouches भी कोशिश की, जो भी अनिर्धारित है।

क्या कोई मदद कर सकता है?

उत्तर

96

वास्तव में, जारी किया छूता है, changedTouches सरणी में पाया जाएगा यानी:

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

मुझे लगता है कि इस originalEvent संपत्ति के माध्यम से जा की तुलना में थोड़ा और अधिक विश्वसनीय है।

आप यहाँ changedTouches के बारे में अधिक पढ़ सकते हैं: http://www.w3.org/TR/touch-events/#changedtouches-of-a-touchevent

+4

यह स्वीकार जवाब नहीं करना चाहिए? इसे वोट दें! –

+0

मैं सहमत हूं, यह सही समाधान है। मैं, मैं इसका उपयोग कर रहा हूं क्योंकि इसमें सही डेटा की आवश्यकता है और आवश्यकता से अधिक एपीआई क्यों मिलाएं। –

+2

यदि आप jQuery का उपयोग कर रहे हैं तो एंड्रॉइड के साथ यह मामला नहीं है। $ ('# test')। ('touchend', function (evt) {console.log (evt.changedTouches);}); खाली है, वही है यदि आप $ ('# test') करते हैं। बाइंड ('टचेंड' ... लेकिन यदि आप समीकरण से jquery को काटते हैं और getElementBy और addEventListener यह काम करता है .. – WORMSS

10

स्पर्श संपत्ति एक टचलिस्ट वस्तु है। आप टचलिस्ट क्लाइंट संदर्भ here देख सकते हैं।

आप #log div पर इस उदाहरण कोड के साथ इसकी लंबाई संपत्ति की निगरानी करते हैं:

$('#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 प्राप्त करते हुए touchstart और touchmove को क्रियान्वित करने, एक 0 जब touchend को क्रियान्वित करेंगे। यही कारण है कि आप e.touches[0] से अपरिभाषित प्राप्त करते हैं।