Odpowiedz

2

Naprawiłem to sam. Jest to tak proste, jak odwzorowywanie zdarzeń myszy na zdarzenia dotykowe.

Więc rozwiązaniem jest poszukiwanie & wymienić:

mousedown -> touchstart 
mouseup -> touchend 
mousemove -> touchmove 
10

Tu było moje rozwiązanie do tworzenia Mootools przeciągnij zdarzenia dotykowe wsparcie. Metoda ta nie wymaga mnie do edycji pliku MooTools więcej ponieważ użyłem Class.refactor (To jest testowany tylko z Mootools v.1.3.1) - to też nie łamie zwykłego zdarzenia click

Class.refactor(Drag, 
    { 
     attach: function(){ 
      this.handles.addEvent('touchstart', this.bound.start); 
      return this.previous.apply(this, arguments); 
     }, 

     detach: function(){ 
      this.handles.removeEvent('touchstart', this.bound.start); 
      return this.previous.apply(this, arguments); 
     }, 

     start: function(event){ 
      document.body.addEvents({ 
       touchmove: this.bound.check, 
       touchend: this.bound.cancel 
      }); 
      this.previous.apply(this, arguments); 
     }, 

     check: function(event){ 
      if (this.options.preventDefault) event.preventDefault(); 
      var distance = Math.round(Math.sqrt(Math.pow(event.page.x - this.mouse.start.x, 2) + Math.pow(event.page.y - this.mouse.start.y, 2))); 
      if (distance > this.options.snap){ 
       this.cancel(); 
       this.document.addEvents({ 
        mousemove: this.bound.drag, 
        mouseup: this.bound.stop 
       }); 
       document.body.addEvents({ 
        touchmove: this.bound.drag, 
        touchend: this.bound.stop 
       }); 
       this.fireEvent('start', [this.element, event]).fireEvent('snap', this.element); 
      } 
     }, 

     cancel: function(event){ 
      document.body.removeEvents({ 
       touchmove: this.bound.check, 
       touchend: this.bound.cancel 
      }); 
      return this.previous.apply(this, arguments); 
     }, 

     stop: function(event){ 
      document.body.removeEvents({ 
       touchmove: this.bound.drag, 
       touchend: this.bound.stop 
      }); 
      return this.previous.apply(this, arguments); 
     } 
    }); 
+0

niesamowite, +1 - jeśli zostało to przetestowane w fazie produkcji i działa, to dlaczego nie modować oryginalnych klas i wysłać żądanie ściągnięcia do mootools - zamiast tego więcej? Urządzenia dotykowe są znacznie bardziej rozpowszechnione i przydaje się to, aby wyjść z pudełka. –

+0

Świetne !! Czy wiesz, jak wyłączyć przewijanie podczas przeciągania zdarzenia dotykowego? Moje okno przewija się w tym samym czasie, co ciągnie ... – Sergio

+0

W rzeczywistości jest problem z powodu błędu Androida, zobacz http://uihacker.blogspot.it/2011/01/android-touchmove-event-bug.html i http : //code.google.com/p/android/issues/detail? id = 5491. Zasadniczo musisz wywołać event.preventDefault() w wywołaniu zwrotnym touchmove, a następnie dostosować rzeczy, aby poprawnie usunąć obsługę zdarzeń – abidibo