2018-04-02 05:34:16 +00:00
|
|
|
export default class TouchController {
|
2017-07-19 16:47:17 +00:00
|
|
|
x: number
|
|
|
|
y: number
|
|
|
|
|
|
|
|
threshold: number
|
|
|
|
|
|
|
|
leftSwipe: Function
|
|
|
|
rightSwipe: Function
|
|
|
|
upSwipe: Function
|
|
|
|
downSwipe: Function
|
|
|
|
|
|
|
|
constructor() {
|
|
|
|
document.addEventListener("touchstart", evt => this.handleTouchStart(evt), false)
|
|
|
|
document.addEventListener("touchmove", evt => this.handleTouchMove(evt), false)
|
|
|
|
|
|
|
|
this.downSwipe = this.upSwipe = this.rightSwipe = this.leftSwipe = () => null
|
2017-07-21 06:09:22 +00:00
|
|
|
this.threshold = 3
|
2017-07-19 16:47:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
handleTouchStart(evt) {
|
|
|
|
this.x = evt.touches[0].clientX
|
|
|
|
this.y = evt.touches[0].clientY
|
|
|
|
}
|
|
|
|
|
|
|
|
handleTouchMove(evt) {
|
|
|
|
if(!this.x || !this.y) {
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
let xUp = evt.touches[0].clientX
|
|
|
|
let yUp = evt.touches[0].clientY
|
|
|
|
|
|
|
|
let xDiff = this.x - xUp
|
|
|
|
let yDiff = this.y - yUp
|
|
|
|
|
|
|
|
if(Math.abs(xDiff) > Math.abs(yDiff)) {
|
|
|
|
if(xDiff > this.threshold) {
|
|
|
|
this.leftSwipe()
|
|
|
|
} else if(xDiff < -this.threshold) {
|
|
|
|
this.rightSwipe()
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if(yDiff > this.threshold) {
|
|
|
|
this.upSwipe()
|
|
|
|
} else if(yDiff < -this.threshold) {
|
|
|
|
this.downSwipe()
|
|
|
|
}
|
|
|
|
}
|
2018-04-02 05:34:16 +00:00
|
|
|
|
2017-07-19 16:47:17 +00:00
|
|
|
this.x = undefined
|
|
|
|
this.y = undefined
|
|
|
|
}
|
|
|
|
}
|