क्या 'टचस्टार्ट' ईवेंट के लिए e.PageX की स्थिति के बराबर है क्योंकि क्लिक इवेंट के लिए है?


104

मैं एक टचस्टार्ट ईवेंट के jQuery के साथ X स्थिति प्राप्त करने की कोशिश कर रहा हूं, जिसका उपयोग लाइव फ़ंक्शन के साथ किया जाता है?

अर्थात

$('#box').live('touchstart', function(e) { var xPos = e.PageX; } );

अब, यह ईवेंट के रूप में 'क्लिक' के साथ काम करता है। कैसे पृथ्वी पर ( अल्फा jQuery मोबाइल का उपयोग किए बिना ) मैं एक स्पर्श घटना के साथ मिलता है?

कोई विचार?

किसी भी मदद के लिए धन्यवाद।


मुझे यह उन लोगों के लिए मिला, जिन्हें इस पर मदद की आवश्यकता है: - stackoverflow.com/questions/3183872/… यह भी टचस्टार्ट पर काम करता है।
मोमज

जवाबों:


180

किंडा देर से, लेकिन आपको मूल घटना तक पहुंचने की आवश्यकता है, न कि jQuery की मालिश। इसके अलावा, चूंकि ये मल्टी-टच इवेंट हैं, इसलिए अन्य बदलाव किए जाने की आवश्यकता है:

$('#box').live('touchstart', function(e) {
  var xPos = e.originalEvent.touches[0].pageX;
});

यदि आप अन्य उंगलियां चाहते हैं, तो आप उन्हें छू सूची के अन्य सूचकांकों में पा सकते हैं।

नए नियम के लिए अद्यतन:

$(document).on('touchstart', '#box', function(e) {
  var xPos = e.originalEvent.touches[0].pageX;
});

आपके पास अंत में एक लापता अंत कोष्ठक है, यह होना चाहिए:})
स्टीवलैसी

आप सही हैं। 2 साल तक किसी ने नहीं देखा! =) धन्यवाद!
मोकिस्टीनन

दुर्भाग्य से मेरे लिए काम नहीं किया, मैं पहले पर एक्स और वाई पाने के लिए समाप्त हो गया touchmove
andrewb

@andrewb, इवेंट हैंडलर e.preventDefault()में जोड़ें touchstart
matewka

धन्यवाद दोस्त। e.touches[0].pageX;मेरे लिए अच्छा काम किया
जयंत वार्ष्णेय ने

43

मैं JQuery आधारित परियोजना के लिए इस सरल फ़ंक्शन का उपयोग करता हूं

    var pointerEventToXY = function(e){
      var out = {x:0, y:0};
      if(e.type == 'touchstart' || e.type == 'touchmove' || e.type == 'touchend' || e.type == 'touchcancel'){
        var touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
        out.x = touch.pageX;
        out.y = touch.pageY;
      } else if (e.type == 'mousedown' || e.type == 'mouseup' || e.type == 'mousemove' || e.type == 'mouseover'|| e.type=='mouseout' || e.type=='mouseenter' || e.type=='mouseleave') {
        out.x = e.pageX;
        out.y = e.pageY;
      }
      return out;
    };

उदाहरण:

$('a').on('mousedown touchstart', function(e){
  console.log(pointerEventToXY(e)); // will return obj ..kind of {x:20,y:40}
})

आशा है कि यह आपके लिए उपयोगी होगा;)


13
ईवेंट पृष्ठ की जांच करने की कोई आवश्यकता नहीं है क्योंकि ई.पॉक्सी स्पर्श घटनाओं के लिए अपरिभाषित होगा। बसout.x = e.pageX || e.originalEvent.touches[0].pageX;
ग्रिफिन

1
वापस लौटने से पहले मैं इस भाग को मूल तत्व के आधार पर प्रतिशत स्थान प्राप्त करने के लिए जोड़ देता हूँ, अगर यह किसी को भी मदद करता है ... var ऑफसेटपार्टेंट = e.target.offsetParent; var parentLeft = e.target.offsetParent.offsetLeft; out.percentX = (out.x - ऑफसेटParent.offsetLeft) / ऑफसेटParent.offsetWhth; out.percentY = (out.y - ऑफसेटParent.offsetTop) / ऑफसेटParent.offsetHeight; वापस लौटना;
sradforth

if(e.type == 'touchstart' || e.type == 'touchmove' || e.type == 'touchend' || e.type == 'touchcancel'){-> if (e.type.startsWith("touch"))?
gil9red

@Griffin - मुझे लगता है कि आपके सुझाव के साथ समस्या यह है कि डेस्कटॉप पर, जब माउस दस्तावेज़ के बाएं किनारे पर होता है, तो आपके कथन की पहली शाखा 0 प्राप्त करेगी, जिसकी व्याख्या गलत है, और फिर ब्राउज़र त्रुटियां क्योंकि छूता है दूसरी शाखा पर अपरिभाषित है। इस बात से सहमत?
MSC

13

मैंने यहां कुछ अन्य उत्तरों की कोशिश की, लेकिन ओरिजनल भी अपरिभाषित था। निरीक्षण करने पर, एक TouchList श्रेणी की संपत्ति मिली (जैसा कि किसी अन्य पोस्टर द्वारा सुझाया गया है) और इस तरह से पेजएक्स / वाई प्राप्त करने में कामयाब रहे:

var x = e.changedTouches[0].pageX;

4
यह सभी जावास्क्रिप्ट आधारित कोड के लिए ठीक काम करता है। पेंच jquery
मार्टियन 2049

2
मेरा मुक्तिदाता! टचमोव () के लिए भी पूरी तरह से काम करता है।
टिबिक्स

7

यदि आप jQuery का उपयोग नहीं कर रहे हैं ... तो आपको TouchListकिसी Touchऑब्जेक्ट को प्राप्त करने के लिए घटना के किसी एक का उपयोग करने की आवश्यकता है जो कि pageX/Y clientX/Yआदि।

यहां प्रासंगिक डॉक्स के लिंक दिए गए हैं:

मैं e.targetTouches[0].pageXअपने मामले में उपयोग कर रहा हूं ।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.