2011-10-13 4 views
5

मेरे पास एक वेब-आधारित एप्लिकेशन है जिसमें एक घटक शामिल है जो उपयोगकर्ता अपनी उंगली से ऊपर और नीचे स्क्रॉल कर सकता है। मैं डिफ़ॉल्ट व्यवहार को रोकने के लिए ईवेंट की रोकथाम डीफॉल्ट विधि का उपयोग करता हूं जहां स्पर्श चाल आईओएस उपकरणों पर पूरी स्क्रीन को बदल देती है।आईओएस 5 में टचमोव इवेंट के डिफ़ॉल्ट व्यवहार को कैसे रोकूं?

दुर्भाग्यवश यह आईओएस 5 में अब और काम नहीं कर रहा है जिसे मैंने अभी तक आज तक अपग्रेड किया है। मुझे यह मानना ​​है कि यह आईओएस 5 में अलग-अलग किया गया है, लेकिन मुझे अभी तक एक संसाधन खोजने में सक्षम होना है जो निर्देश प्रदान करता है।

धन्यवाद!

अद्यतन # 1: मुझे अपने विशिष्ट प्रश्न का उत्तर नहीं मिला है, लेकिन मैं -webkit-overflow-scrolling शैली का उपयोग करने के लिए थोड़ा सा कोड समायोजित करने में सक्षम था (स्पर्श के मूल्य पर सेट ") और स्नैज़ी इनर्टियल स्क्रॉलिंग क्षमता को लागू करें (जहां सामग्री आपके स्वाइप की गति के आधार पर तेज़ी से स्क्रॉल करती है और यदि सीमाएं हिट करती हैं तो" रबर बैंड बाउंस "वापस आ जाएगी। बहुत अच्छी लग रही है ...

अपडेट # 2: मेरे पास अब एक और अजीब समस्या है। कुछ अजीब कारणों से ओवरफ्लो स्क्रॉलिंग व्यवहार कभी-कभी मिश्रित हो जाता है जिससे आपको अपनी सामग्री को ऊपर और नीचे ले जाने के लिए अपनी अंगुली को बाएं और दाएं खींचने के लिए होता है। मैं अभी तक सक्षम नहीं हूं यह पता लगाने के लिए कि ऐसा क्यों होता है - क्या किसी के पास कोई विचार है ???

उत्तर

6

पहले, मैं पुष्टि कर सकते हैं कि e.preventDefault() को निष्क्रिय iOS 5 में सभी स्क्रॉल निम्नलिखित कोड का उपयोग कर:

document.ontouchmove = function(e){ e.preventDefault(); } 

दुर्भाग्य से, हालांकि, इस स्क्रॉल अतिप्रवाह पर अक्षम कर देता है: स्क्रॉल divs। (अगर किसी के पास कोई समाधान है जो आंतरिक तत्व स्क्रॉलिंग सक्षम करता है, तो कृपया साझा करें।)

अद्यतन # 2 के संबंध में, मैंने एक और स्क्रोल करने योग्य तत्व (पृष्ठ स्वयं सहित) में स्क्रॉल करने योग्य स्क्रॉल करने योग्य तत्व होने पर अजीब व्यवहार देखा है। कभी-कभी डिवाइस उस तत्व पर हिचकिचाता है जिस पर उपयोगकर्ता स्क्रॉल करना चाहता है। विशेष रूप से मैंने स्थिति का उपयोग करके इस समस्या को देखा है: निश्चित। मेरा समाधान यह सुनिश्चित करना था कि शरीर में 100% ऊंचाई हो और स्क्रोल करने योग्य तत्व स्थिति का उपयोग करें: पूर्ण जहां संभव हो।

+0

हो सकता है कि आप कुछ तर्क 'की तरह करता है, तो जाँच कर सकता है ($ (e.currentTarget) .css ('अतिप्रवाह') = 'पुस्तक'!) ई .preventDefault(); '। चूंकि document.ontouchmove scollable element के ontouchmove के बाद आग लग जाएगा, आप 'el.ontouchmove = function() {allowScroll = true} 'कर सकते हैं और उसके बाद' document.ontouchmove' उस मान का उपयोग करने के लिए उस मान का उपयोग करें और फिर मान को वापस सेट करें झूठी –

+0

@BrianNickel टिप के लिए धन्यवाद। यह सही दिशा में एक कदम है जो आपको तत्व-दर-तत्व आधार (सीधे शरीर पर स्क्रॉल करने सहित) पर सीधे स्क्रॉलिंग को रोकने की अनुमति देगा, लेकिन यदि उपयोगकर्ता स्क्रोल करने योग्य तत्व को स्पर्श करता है जो पहले से ही इसके स्क्रोल करने योग्य के किनारे पर है रेंज, यह अभी भी शरीर को स्क्रॉल करना समाप्त कर देगा (नीचे ग्रे लिनन दिखा रहा है)। शायद एकमात्र तरीका टचमोव की दिशा की व्याख्या करना है और जांचना है कि क्या तत्व इसकी स्क्रोल करने योग्य रेंज के किनारे पर है? –

+0

@RyanRapp आपकी प्रतिक्रिया के लिए धन्यवाद।मैंने शायद स्पष्ट रूप से पर्याप्त वर्णन नहीं किया कि मैं किस व्यवहार के बारे में बात कर रहा हूं। आईओएस 4 के साथ मैं एक तत्व के भीतर e.preventDefault() का उपयोग करूंगा (कहें, एक डीआईवी) ओवरफ्लो के टचमोव इवेंट हैंडलर के साथ कि मैं तत्व के भीतर उंगली के आंदोलन के आधार पर पूर्ण स्थिति के माध्यम से सामग्री को स्थानांतरित कर सकता हूं। अब e.preventDefault() इस ब्लॉक को अवरुद्ध करता है जब मैं अपनी उंगली को पूरे पृष्ठ पर ले जाने की कोशिश करता हूं, जिसमें स्क्रॉल करने के लिए पर्याप्त सामग्री नहीं है, इतना स्क्रॉल नहीं करता है लेकिन चारों ओर घूमता है ताकि आप इसके पीछे सफारी के पृष्ठभूमि बनावट को देख सकें। – natlee75

7

मुझे एक बहुत ही सरल समाधान मिला। जब ईवेंट स्क्रॉल करने की अनुमति देने वाले आपके तत्व को हिट करता है, तो ईवेंट पर केवल ध्वज जोड़ें। यदि ध्वज सेट है दस्तावेज़ पर घटना श्रोता पर बस की जाँच करें और केवल घटना को रोकने यदि ध्वज सेट नहीं है:

this.$scrollableEl.on('touchmove', function(event){ 
    event.comesFromScrollable = true; 
    //when you have containers that are srollable but 
    //doesn't have enough content to scroll sometimes: 
    //event.comesFromScrollable = el.offsetHeight < el.scrollHeight; 
}) 

$document.on('touchmove', function(event){ 
    if(!event.comesFromScrollable){ 
     event.preventDefault() 
    } 
    }) 

तुम भी बजाय event.stopImmediatePropagation इस्तेमाल कर सकते हैं, तो आप न दस्तावेज़ पर eventListener की जरूरत तत्व है, लेकिन इस zepto.js tap टूट जाता है मेरे मामले में:

this.$scrollableEl.on('touchmove', function(event){ 
    event.stopImmediatePropagation() 
}) 
+0

धन्यवाद! एक जादू की तरह काम करता है! मैंने इसे इस तरह से संशोधित किया कि मैं एक कस्टम डेटा-विशेषता जोड़ता हूं और यदि उपलब्ध स्क्रॉलिंग बंद नहीं किया जाएगा। इस तरह हम एक eventlistener बचा सकते हैं :) –

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