const MIN_DISTANCE = 10; export default { methods: { touchstart(e) { this._left = this.left this.stopTouchStart(e) }, touchmove(e) { // 是否可以滑动页面 this.stopTouchMove(e); if (this.direction == 'horizontal') { this.moveTo({ deltaX: this.deltaX, deltaY: this.deltaY || 0, left: this._left + this.deltaX }) } // FIXME: 冒泡 return false }, touchend() { this.moveEnd({ velocity: Math.abs(this.deltaX / this.timing), direction: this.direction, deltaX: this.deltaX, deltaY: this.deltaY, }) }, stopTouchStart(event) { this.resetTouchStatus(); const touch = event.touches[0]; this.startTime = new Date().getTime(); this.startX = touch.clientX; this.startY = touch.clientY; }, stopTouchMove(event) { const touch = event.touches[0]; this.timing = new Date().getTime() - this.startTime; this.deltaX = touch.clientX - this.startX; this.deltaY = touch.clientY - this.startY; this.offsetX = Math.abs(this.deltaX); this.offsetY = Math.abs(this.deltaY); this.direction = this.direction || this.getDirection(this.offsetX, this.offsetY); }, getDirection(x, y) { if (x > y && x > MIN_DISTANCE) { return 'horizontal'; } if (y > x && y > MIN_DISTANCE) { return 'vertical'; } return ''; }, resetTouchStatus() { this.direction = ''; this.deltaX = 0; this.deltaY = 0; this.offsetX = 0; this.offsetY = 0; } } }