Added touch controller

This commit is contained in:
Eduard Urbach 2017-07-19 18:47:17 +02:00
parent 6329b7026d
commit 49fef1e57b
2 changed files with 63 additions and 1 deletions

View File

@ -6,6 +6,7 @@ import { Diff } from "./Diff"
import { MutationQueue } from "./MutationQueue" import { MutationQueue } from "./MutationQueue"
import { StatusMessage } from "./StatusMessage" import { StatusMessage } from "./StatusMessage"
import { PushManager } from "./PushManager" import { PushManager } from "./PushManager"
import { TouchController } from "./TouchController"
export class AnimeNotifier { export class AnimeNotifier {
app: Application app: Application
@ -16,6 +17,8 @@ export class AnimeNotifier {
statusMessage: StatusMessage statusMessage: StatusMessage
visibilityObserver: IntersectionObserver visibilityObserver: IntersectionObserver
pushManager: PushManager pushManager: PushManager
touchController: TouchController
sideBar: HTMLElement
mainPageLoaded: boolean mainPageLoaded: boolean
lastReloadContentPath: string lastReloadContentPath: string
@ -117,9 +120,15 @@ export class AnimeNotifier {
this.pushManager = new PushManager() this.pushManager = new PushManager()
// Sidebar control // Sidebar control
this.sideBar = this.app.find("sidebar")
document.body.addEventListener("click", e => { document.body.addEventListener("click", e => {
this.app.find("sidebar").classList.remove("sidebar-visible") this.sideBar.classList.remove("sidebar-visible")
}) })
this.touchController = new TouchController()
this.touchController.leftSwipe = () => this.sideBar.classList.remove("sidebar-visible")
this.touchController.rightSwipe = () => this.sideBar.classList.add("sidebar-visible")
} }
async onContentLoaded() { async onContentLoaded() {

View File

@ -0,0 +1,53 @@
export class TouchController {
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
this.threshold = 5
}
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()
}
}
this.x = undefined
this.y = undefined
}
}