2014-10-21 4 views
18

Ich bin Herumspielen mit Touch-Ereignisse auf einem Touch-Slider abzubrechen und ich immer die folgende Fehlermeldung erhalten:Touch-Bewegung Ignoriert Versuch stecken eine Berührungsbewegungs

Ignored attempt to cancel a touchmove event with cancelable=false, for example because scrolling is in progress and cannot be interrupted.

Ich bin mir nicht sicher, was dieses Problem verursacht Ich bin neu in der Arbeit mit Berührungsereignissen und kann dieses Problem anscheinend nicht beheben.

Hier ist der Code des Touch-Event-Handling:

Slider.prototype.isSwipe = function(threshold) { 
    return Math.abs(deltaX) > Math.max(threshold, Math.abs(deltaY)); 
} 


Slider.prototype.touchStart = function(e) { 

    if (this._isSliding) return false; 

     touchMoving = true; 
     deltaX = deltaY = 0; 

    if (e.originalEvent.touches.length === 1) { 

     startX = e.originalEvent.touches[0].pageX; 
     startY = e.originalEvent.touches[0].pageY; 

     this._$slider.on('touchmove touchcancel', this.touchMove.bind(this)).one('touchend', this.touchEnd.bind(this)); 

     isFlick = true; 

     window.setTimeout(function() { 
      isFlick = false; 
     }, flickTimeout); 
    } 
} 


Slider.prototype.touchMove = function(e) { 

    deltaX = startX - e.originalEvent.touches[0].pageX; 
    deltaY = startY - e.originalEvent.touches[0].pageY; 

    if(this.isSwipe(swipeThreshold)) { 
     e.preventDefault(); 
     e.stopPropagation(); 
     swiping = true; 
    } 
    if(swiping) { 
     this.slide(deltaX/this._sliderWidth, true) 
    } 
} 


Slider.prototype.touchEnd = function(e) { 

    var threshold = isFlick ? swipeThreshold : this._sliderWidth/2; 

    if (this.isSwipe(threshold)) { 
     deltaX < 0 ? this.prev() : this.next(); 
    } 
    else { 
     this.slide(0, !deltaX); 
    } 

    swiping = false; 

    this._$slider.off('touchmove', this.touchMove).one(transitionend, $.proxy(function() { 
     this.slide(0, true); 
     touchMoving = false; 
    }, this)); 
} 

Sie können die tatsächlichen Schieber finden here at this pen.

Wenn Sie schnell genug durchwischen, wird der Fehler ausgelöst und manchmal in der Mitte eines Streifzugs stecken bleiben. Ich kann immer noch nicht sagen, warum es nicht funktioniert. Jede Hilfe/Einsicht würde sehr geschätzt werden. Nicht sicher, was ich falsch mache.

Antwort

9

Ich hatte dieses Problem und alles, was ich tun musste, ist return true von touchend und die Warnung ging weg.

+7

Ändert nichts hier – Eric

+0

Und was ist der Grund dafür? –

+0

Ich habe 'e.cancelable' zu ​​einer if-Anweisung hinzugefügt, bevor ich versuche,' e.preventDefault() 'in dieser Anweisung aufzurufen. – ravo10

3

Wenn Sie während des aktiven Scrollens in Google Chrome preventDefault unter touchmove anrufen, funktioniert das nicht. Um Leistungsprobleme zu vermeiden, können Sie einen Bildlauf nicht unterbrechen.

Versuchen Sie preventDefault() von touchstart anrufen und alles sollte in Ordnung sein.

+1

Dann bekomme ich nur: Ignorierter Versuch, ein Touchstart-Ereignis abzubrechen – Curtis