2012-03-19 20 views
5

Im 1 eksen için kaydırma devre dışı default: preventDefaultEvents ile http://www.netcu.de/jquery-touchwipe-iphone-ipad-libraryjQuery Touchwipe - jQuery Touchwipe eklentisi kullanarak sadece

: true olası bir iPhone üzerinde behavour sürükleyerek varsayılan Dissable için. Bununla birlikte, ihtiyacım olan şey, varsayılanın sadece 1 eksende açık olması. Yukarı ve aşağı kaydırmak için sürüklenebilecek kullanıcılara ihtiyacım var, ancak soldan sağa sürükleme özelliği devre dışı bırakılmalı ve işlevim bunun yerine tetiklenecektir. Teşekkürler

cevap

12

Aynı ihtiyacı yaşadım ve olayı wipeLeft, wipeRight, wipeUp ve wipeDown geri aramalarına iletmek için touchwipe eklentisini uzattım. Bu, preventDefaultEvents: false'u yapılandırmada ayarlamamı ve gerektiğinde özel geri çağrılarımda yapmamı sağlar, ilk şey: e.preventDefault();.

Eklenti yazarına değişiklikler gönderdim.

modifiye eklenti:

(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

mükemmel, çok teşekkürler! – felixthehat

+2

Bunu denedim ancak sol/sağ sürüklerken ekran hala devam ediyor, e.preventDefault() tam çalışmıyor veya çok geç veya bir şey deniyor. Simülatörde test yaptım ... gerçek bir telefondan farklı mı? – Huangism

+1

Huangism: Silme işlevlerinin, "wipeLeft: function (e) {...}" gibi bir "attr", yani "e.preventDafult(); –