2012-02-12 11 views
15

में ड्रैग पर पेज स्क्रॉल को रोकें मैं एचटीएमएल 5 कैनवास गेम पर काम कर रहा हूं, लेकिन मुझे नहीं पता कि टच इवेंट कैसे संभालें। जब कोई उपयोगकर्ता स्क्रीन को स्पर्श करता है, और खींचता है, तो ब्राउज़र पृष्ठ को स्क्रॉल करेगा। मैं इसे रोकना चाहता हूं, और स्पर्श शुरू करना चाहता हूं, और अंत स्थिति को स्पर्श करना चाहता हूं। क्या यह संभव है?आईओएस और एंड्रॉइड

अग्रिम धन्यवाद

+1

अपने आप को यहां से शुरू करें http://jquerymobile.com/ – ShankarSangoli

+3

क्षमा करें, लेकिन मैं पुस्तकालयों का उपयोग नहीं करना चाहता हूं। यह jquerymobile में कैसे काम करता है? –

+1

यह प्लगइन नहीं है लेकिन jQuery मोबाइल लाइब्रेरी, – ShankarSangoli

उत्तर

19

पृष्ठ को खींचने वाले स्पर्शियों को रोकने के लिए आपको डिफ़ॉल्ट स्पर्श व्यवहार को ओवरराइड करने की आवश्यकता है। जाहिर है, यदि आपका पृष्ठ उपलब्ध क्षेत्र से बड़ा हो जाता है, तो आपको उन्हें फिर से संभालना होगा, लेकिन जैसा कि आप एक गेम बना रहे हैं, मान लें कि आप 100%/100% लेआउट कर रहे हैं।

यह कोड फोनगैप डिफ़ॉल्ट index.html से है लेकिन आपकी मदद करेगा, मुझे यकीन है।

function preventBehavior(e) { 
    e.preventDefault(); 
}; 

document.addEventListener("touchmove", preventBehavior, false); 

मैं एक और चीज जोड़ना चाहता हूं जो आप ढांचे से बचने के लिए सही रास्ते पर हैं। वे कुछ चीजों के लिए बहुत अच्छे हैं, लेकिन आप जमीन से निकलने वाले बहुत अच्छे परिणाम प्राप्त करेंगे।

संपादित करें: यहां W3C working draft स्पर्श ईवेंट के बारे में बात कर रहा है, जो आपके लिए आसान हो सकता है।

+1

यह पृष्ठ यह बताता है कि स्पर्श ईवेंट कैसे प्रबंधित किए जाते हैं: http: // stackoverflow .com/प्रश्न/7056026/भिन्नता-के-ई-स्पर्श-ई-टार्गेटोच-एंड-ई-चेंजटॉच – David

+0

कुछ मामलों में आपको 'document.addEventListener ("टचस्टार्ट", रोकथाम, झूठा) भी जोड़ना चाहिए; कोड में इसे काम करने के लिए ऊपर। – optimizitor

3
canvas.addEventListener('touchstart', function(e) 
{ 
    alert(e.changedTouches[0].pageX + " " + e.changedTouches[0].pageY); 
} 
canvas.addEventListener('touchend', function(e) 
{ 
    alert(e.changedTouches[0].pageX + " " + e.changedTouches[0].pageY); 
} 

यहाँ छू और मोबाइल फोन पर इशारा के बारे में एक अच्छा लेख है:

http://www.sitepen.com/blog/2008/07/10/touching-and-gesturing-on-the-iphone/

+1

क्या आपको 'e.preventDefault()' की आवश्यकता है? –

9

आप तो jQuery मोबाइल या किसी अन्य पुस्तकालय का उपयोग नहीं करना चाहते हैं आप इसे आजमा सकते हैं।

var startX, startY, endX, endY; 
document.addEventListener("touchstart", function(e){ 
    startX = e.touches[0].pageX; 
    startY = e.touches[0].pageY; 

    e.preventDefault();//Stops the default behavior 
}, false); 

document.addEventListener("touchend", function(e){ 
    endX = e.touches[0].pageX; 
    endY = e.touches[0].pageY; 

    e.preventDefault();//Stops the default behavior 
}, false); 
+0

क्यों डाउनवोट ??? क्या आप कारण छोड़ सकते हैं? – ShankarSangoli

+1

मैंने डाउनवोट नहीं किया लेकिन ... आपके पास कुछ वाक्यविन्यास त्रुटियां हैं और आपकी पोस्ट में आपने लिखा है "अगर आप jQuery मोबाइल का उपयोग नहीं करना चाहते हैं" तो jQuery कोड पोस्ट किया। ओपी ने कहा कि वह पुस्तकालयों का उपयोग नहीं करना चाहता था। – Will

+1

@WilliamVanRensselaer - इसके लिए धन्यवाद मैं पूरी तरह से चूक गया ओपी या तो jQuery का उपयोग नहीं कर रहा है। मैंने सोचा कि ओपी jQuery मोबाइल नहीं चाहता है। लेकिन अब सादे जावास्क्रिप्ट का उपयोग करने के लिए मेरे कोड को संशोधित किया। – ShankarSangoli

5

क्रोम के हाल के संस्करणों में किए गए परिवर्तनों को तोड़ने के कारण, उपर्युक्त उत्तर अब सही नहीं हैं। दस्तावेज़ या बॉडी तत्वों के लिए टच इवेंट श्रोता को संलग्न करने से ईवेंट श्रोता को "निष्क्रिय" मोड में पंजीकृत किया जाएगा, जिससे preventDefault पर कॉल को अनदेखा किया जा सकता है।

दो समाधान हैं:

  • पसंदीदा समाधान निर्दिष्ट करने के लिए है कि कोई स्क्रॉल होना चाहिए सीएसएस शैली touch-action उपयोग करने के लिए है (उदाहरण के मूल्य "कोई नहीं" के साथ)

  • मामलों में जहां में यह उचित नहीं है (उदाहरण के लिए यदि बातचीत का प्रकार गतिशील रूप से उस तरीके से बदलना चाहिए जिसे इशारा शुरू होने से पहले निर्धारित नहीं किया जा सकता है) तो ईवेंट श्रोता को तीसरे पैरामीटर सेट के साथ { passive: false } पर पंजीकृत होना चाहिए (आपको यह सुनिश्चित करने के लिए ब्राउज़र का पता लगाना चाहिए शैली पहले समर्थित है, टी hough)।

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