触摸移动卡住忽略尝试取消触摸移动
我正在搞乱触摸滑块上的触摸事件,我不断收到以下错误:
忽略尝试取消具有cancelable = false的touchmove事件,例如因为滚动正在进行且无法中断。
我不确定是什么导致了这个问题,我不熟悉触摸事件,似乎无法解决这个问题。
以下是处理触摸事件的代码:
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)); }
您可以在此笔中找到实际的滑块。
如果你刷得足够快,它会抛出错误,有时会卡在滑动中间。 仍然无法解决为什么它不起作用。 任何帮助/见解将不胜感激。 不确定我做错了什么。
我遇到了这个问题而且我所要做的就是从touchend return true
并且警告消失了。
在您主动滚动时调用touchmove
preventDefault
在Chrome中无效。 为防止出现性能问题,您无法中断滚动。
尝试从touchstart
调用preventDefault()
,一切都应该没问题。
请删除e.preventDefault()
,因为event.cancelable
的event.cancelable为false
。 所以你不能称这种方法。