2013-07-30 7 views
17

मैं touchend ईवेंट पर स्पर्श समन्वय को पकड़ने की कोशिश कर रहा हूं लेकिन अपरिभाषित हूं। touchstart ईवेंट अच्छा काम करता है, लेकिन एक ही अवधारणा touchend पर विफल हो जाती है। मैंने इस कोड को mousedown और mouseup और that के साथ अच्छा बनाया है।टचेंड निर्देशांक कैप्चर कैसे करें?

मुझे क्या याद आ रही है?

div.addEvent("touchstart", function (event) { 
    event.preventDefault(); // to avoid scrolling 
    span.innerHTML = event.page.x; 
}); 
div.addEvent("touchend", function (event) { 
    span.innerHTML = event.page.x; 
}); 

FIDDLE

उत्तर

23

आप touchmove पर मान संग्रहीत और touchend में इसे पढ़ने के लिए की जरूरत है।

var lastMove = null; 

// Save the touchstart to always have a position 
div.addEvent('touchstart', function(event) { 
    lastMove = event; 
}); 

// Override with touchmove, which is triggered only on move 
div.addEvent('touchmove', function(event) { 
    lastMove = event; 
}); 
+0

क्या यह इतना आसान था? धन्यवाद! यह 'माउसअप' पर 'mousemove' के बिना क्यों काम करता है? – Rikard

+1

जो मुझे नहीं पता। और मैंने अनुमान लगाया होगा कि टचेंड ईवेंट में वह स्थिति शामिल होगी जहां यह समाप्त हो गया था, लेकिन शायद ऐसे कोने के मामले हैं जहां देना संभव नहीं है, जैसे कि स्पर्श क्षेत्र से बाहर निकलता है (** के स्पष्ट मूल्य को संभव नहीं है वर्तमान ** भले ही पिछला ज्ञात था)। 'माउसअप' फिर क्षेत्र के अंदर * हमेशा * होता है और जब क्षेत्र बाहर निकलता है तो 'माउसआउट' का उपयोग किया जाता है। – adrenalin

+0

समझ में आता है। फिर से धन्यवाद! – Rikard

19

मैं specification को देखकर किया गया है, 4 स्पर्श इवेंट touchEvent वस्तु है, जो 3 सूची के समय में (स्क्रीन पर हर उंगली) सभी छूता है के बारे में जानकारी युक्त गुण है से विरासत घटना, प्रत्येक सूची इस मानदंड के आधार पर स्पर्श बचाती है:

changedTouches: लक्षित तत्व सतह से बाहर होने वाले स्पर्शों को बचाता है।

touches: सभी मौजूदा स्पर्श बचाता है।

targetTouch: लक्ष्य तत्व की सतह के भीतर मौजूद सभी मौजूदा स्पर्शों को बचाता है।

घटना टचेंडर उस स्थिति को बचाता है जहां उंगली changedTouches पर उठाई गई थी, और कुछ अन्य सूचियों में कुछ भी सहेजा नहीं गया है, इसलिए यदि आपको इसे एक्सेस करने की आवश्यकता है, तो आपको event.changedTouches[event.changedTouches.length-1] का उपयोग करना चाहिए, यह पेजएक्स के साथ एक स्पर्श ऑब्जेक्ट देता है और निर्देशांक के लिए पेजवाई एट्रिब्यूट्स।
पूरी लाइन होगा:

span.innerHTML = event.changedTouches[event.changedTouches.length-1].pageX;


क्या मैं अभी तक को समझने के लिए है कोई touchEvent वस्तु में गुण समन्वय हो, तो समर्थ हुए, तुम क्यों नहीं उन्हें touchstart और touchmove घटनाओं में उपयोग करने के लिए मिलता है, और टचेंड के साथ। शायद कार्यान्वयन ने इस शॉर्टकट को जोड़ा, या मैं मिस्रेड।

+0

जोड़ दूंगा यह वही है जो मुझे चाहिए। कुछ डिवाइसों पर टचमोव ट्रिगर नहीं होता है यदि आंदोलन एक टैप की तरह अधिक होता है। इसलिए टचमोव के भीतर से ईवेंट को स्टोर करना विफल रहा था। यह विधि हर बार काम करती है। :) –

+0

यह e.originalEvent.changedTouches है [...] – rttmax

+0

originalEvent को टचचेंड के लिए हैंडलर में मिली घटना ऑब्जेक्ट के लिए अपरिभाषित है। –

2

आप का उपयोग करना चाहिए अगर आप एक jQuery विकल्प की जरूरत है changedTouches बजाय touches

div.addEvent("touchstart", function (event) { 
    event.preventDefault(); // to avoid scrolling 
    span.innerHTML = event.pageX; 
}); 
div.addEvent("touchend", function (event) { 
    span.innerHTML = event.changedTouches[0].pageX; 
}); 
0
touchStart(event) { 
    this.startX = event.touches[0].pageX; 
}, 
touchEnd(event) { 
    this.endX = event.changedTouches[0].pageX; 
}, 
+1

क्या आप अतिरिक्त जानकारी प्रदान करके अपने उत्तर पर विस्तार कर सकते हैं? आपके कोड को समझाने के लिए केवल एक या दो वाक्य पर्याप्त होंगे। – Frits

1

touchend में हालांकि सवाल jQuery के लिए नहीं पूछा, इस कोड का प्रयास करें। JQuery के सभी नवीनतम संस्करणों पर काम करता है।

$(document).on('touchstart', '.className', function (e) { 
    console.log(e.originalEvent.touches[0].pageX); 
}); 
$(document).on('touchend', '.className', function (e) { 
    console.log(e.originalEvent.changedTouches[0].pageX); 
}); 

आप वैकल्पिक रूप से 'originalEvent' छोड़ सकते हैं, और जे एस के लिए 'changedTouches' केवल स्क्रिप्ट और jQuery/ब्राउज़रों कि समर्थन नहीं करता है का उपयोग करें।

संबंधित मुद्दे