2012-03-19 11 views
5

इम 1 अक्ष के लिए स्क्रॉल jQuery Touchwipe प्लगइन का उपयोग कर: http://www.netcu.de/jquery-touchwipe-iphone-ipad-libraryjQuery Touchwipe - अक्षम डिफ़ॉल्ट केवल

preventDefaultEvents साथ

: सच इसके संभावित डिफ़ॉल्ट एक iPhone पर behavour खींच dissable के लिए। हालांकि मुझे केवल 1 अक्ष में डिफ़ॉल्ट व्यवहार को भंग करने की आवश्यकता है। मुझे उपयोगकर्ताओं को ऊपर और नीचे स्क्रॉल करने में सक्षम होने की आवश्यकता है, लेकिन बाएं से दाएं को खींचने के लिए अक्षम होने की आवश्यकता है और मेरा फ़ंक्शन इसके बजाए आग लग जाएगा। धन्यवाद

उत्तर

12

मुझे वही आवश्यकता थी और टचवाइप प्लगइन को वाइप लेफ्ट, वाइपराइट, वाइपअप और वाइपडाउन कॉलबैक पर पास करने के लिए बढ़ा दिया गया था। इससे मुझे कॉन्फ़िगरेशन में preventDefaultEvents: false सेट करने की अनुमति मिलती है और फिर यदि आवश्यक हो तो मेरे विशिष्ट कॉलबैक में, पहली चीज़ करें: e.preventDefault();

मैंने प्लगइन लेखक में संशोधन भेजे। इतना

(function($) { 
$.fn.touchwipe = function(settings) { 
    var config = { 
      min_move_x: 20, 
      min_move_y: 20, 
      wipeLeft: function(e) { }, 
      wipeRight: function(e) { }, 
      wipeUp: function(e) { }, 
      wipeDown: function(e) { }, 
      preventDefaultEvents: true 
    }; 

    if (settings) $.extend(config, settings); 

    this.each(function() { 
     var startX; 
     var startY; 
     var isMoving = false; 

     function cancelTouch() { 
      this.removeEventListener('touchmove', onTouchMove); 
      startX = null; 
      isMoving = false; 
     } 

     function onTouchMove(e) { 
      if(config.preventDefaultEvents) { 
       e.preventDefault(); 
      } 
      if(isMoving) { 
       var x = e.touches[0].pageX; 
       var y = e.touches[0].pageY; 
       var dx = startX - x; 
       var dy = startY - y; 
       if(Math.abs(dx) >= config.min_move_x) { 
        cancelTouch(); 
        if(dx > 0) { 
         config.wipeLeft(e); 
        } 
        else { 
         config.wipeRight(e); 
        } 
       } 
       else if(Math.abs(dy) >= config.min_move_y) { 
         cancelTouch(); 
         if(dy > 0) { 
          config.wipeDown(e); 
         } 
         else { 
          config.wipeUp(e); 
         } 
        } 
      } 
     } 

     function onTouchStart(e) 
     { 
      if (e.touches.length == 1) { 
       startX = e.touches[0].pageX; 
       startY = e.touches[0].pageY; 
       isMoving = true; 
       this.addEventListener('touchmove', onTouchMove, false); 
      } 
     } 
     if ('ontouchstart' in document.documentElement) { 
      this.addEventListener('touchstart', onTouchStart, false); 
     } 
    }); 

    return this; 
}; 

})(jQuery); 
+0

एकदम सही है यही कारण है, धन्यवाद:

संशोधित प्लगइन! – felixthehat

+2

मैंने कोशिश की है लेकिन बाएं/दाएं खींचते समय, स्क्रीन अभी भी डूबती है, e.preventDefault() पूरी तरह से काम नहीं कर रहा है या इसे बहुत देर हो चुकी है या कुछ कहा जाता है। मैंने सिम्युलेटर पर परीक्षण किया ... क्या यह एक वास्तविक फोन पर अलग है? – Huangism

+1

हुआंगवाद: वाइप कार्यों को एआरआर के रूप में घटना लेने की आवश्यकता होती है, जैसे 'wipeLeft: function (e) {...} 'फिर' e.preventDafult();' पहली चीज़ के रूप में कॉल करें। –

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