2011-09-20 8 views
7

मेरे पास मेरे जेएस के शीर्ष पर निम्न अधिकार है (जो काम करने के लिए iScroll प्लगइन के लिए आवश्यक है)।टचमोव ईवेंटलिस्टर को पुन: सक्षम करना। फोन अंतराल के साथ आईफोन ऐप

document.addEventListener('touchmove', function (e) {e.preventDefault();}, false); 

कुछ पृष्ठों पर, मैं पुन: सक्षम करने के लिए इस ताकि सामान्य iPhone स्क्रॉल अधिक लेता है (और कीड़े तय करने के लिए जब iscroll पृष्ठ पर प्रयोग किया जाता है जहां iphone कुंजीपटल एक इनपुट बॉक्स पर पॉपअप नहीं है) की जरूरत है।

मैं वाक्यविन्यास कसरत नहीं कर सकता। क्या कोई जानता है कि कैसे?

+0

कुछ भी करने से टचमोव को रोकने से एंड्रॉइड पर मेरे फोनगैप ऐप में सभी स्क्रॉलिंग रोक रही थी! जब मैंने परीक्षण के लिए उस पंक्ति को हटा दिया, तो सब ठीक काम किया .... iScroll तत्वों सहित। तो मुझे आश्चर्य है कि मुझे उस लाइन की ज़रूरत है? –

उत्तर

12

तुम इतनी तरह, एक समारोह है कि preventDefault व्यवहार संभालती है परिभाषित करने के लिए की आवश्यकता होगी: आप घटना श्रोता को हटा सकते हैं और स्क्रॉल डिफ़ॉल्ट पुन: सक्षम, अपने कोड में

document.addEventListener('touchmove', preventDefault, false); 
function preventDefault(e) { e.preventDefault(); }; 

इस तरह बाद में:

document.removeEventListener('touchmove', preventDefault, false); 

अब जब भी आपको आवश्यकता हो, इसे फिर से जोड़ और निकालने में सक्षम हैं।

आप अपने मूल पोस्ट में की तरह एक इनलाइन, अनाम फ़ंक्शन का उपयोग है, क्योंकि एक ही रास्ता आप एक गुमनाम समारोह का उल्लेख कर सकते पहले, यह आग जाने और फिर इसे करने के लिए संदर्भ को हटाने के लिए यह पूरा नहीं कर सकते हैं जैसे:

document.addEventListener('touchmove', function(e) { 
    e.preventDefault(); 

    // some more logic... 

    this.removeEventListener('touchmove', arguments.callee, false); 
}, false); 

स्पष्ट रूप से यह वह प्रभाव नहीं है जिसे आप चाहते हैं। आप एक ऑब्जेक्ट भी बना सकते हैं और ईवेंट को संभालने वाली विधि के संदर्भ को संग्रहीत कर सकते हैं। यदि आप थोड़ा गहराई से गोता लगाने के लिए देख रहे हैं तो मुझे यह थ्रेड उपयोगी पाया: How to removeEventListener on anonymous function?

+0

यह एक सपने की तरह काम किया! बहुत बहुत धन्यवाद :) – Billie

+0

धन्यवाद, बिल्कुल मुझे क्या चाहिए! – hidace

0

मेरे आईफोन पर addEventLister के बाद, मैं उन्हें और भी हटा नहीं सकता। लेकिन यह मेरे लिए काम करता है।

var prevent = preventDefault(e) { e.preventDefault(); }; 
//To disable drag 
element.ontouchmove = prevent; 

... 

//To enable it agian 
element.ontouchmove = null; 
संबंधित मुद्दे