Skip to content

Commit

Permalink
On touchscreens close menu on swipe left
Browse files Browse the repository at this point in the history
  • Loading branch information
kimsible committed Aug 15, 2020
1 parent e3666cf commit c53283e
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 0 deletions.
1 change: 1 addition & 0 deletions client/src/app/core/menu/menu.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ export class MenuService {
if (this.screenService.isInTouchScreen()) {
if (this.isMenuDisplayed) {
document.body.classList.add('menu-open')
this.screenService.onFingerSwipe('left', () => { this.setMenuDisplay(false) })
} else {
document.body.classList.remove('menu-open')
}
Expand Down
58 changes: 58 additions & 0 deletions client/src/app/core/wrappers/screen.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,64 @@ export class ScreenService {
return this.windowInnerWidth
}

// https://stackoverflow.com/questions/2264072/detect-a-finger-swipe-through-javascript-on-the-iphone-and-android
onFingerSwipe (direction: 'left' | 'right' | 'up' | 'down', action: () => void, removeEventOnEnd = true) {
let touchDownClientX: number
let touchDownClientY: number

const onTouchStart = (event: TouchEvent) => {
const firstTouch = event.touches[0]
touchDownClientX = firstTouch.clientX
touchDownClientY = firstTouch.clientY
}

const onTouchMove = (event: TouchEvent) => {
if (!touchDownClientX || !touchDownClientY) {
return
}

const touchUpClientX = event.touches[0].clientX
const touchUpClientY = event.touches[0].clientY

let touchClientX = Math.abs(touchDownClientX - touchUpClientX)
let touchClientY = Math.abs(touchDownClientY - touchUpClientY)

if (touchClientX > touchClientY) {
if (touchClientX > 0) {
if (direction === 'left') {
if (removeEventOnEnd) this.removeFingerSwipeEventListener(onTouchStart, onTouchMove)
action()
}
} else {
if (direction === 'right') {
if (removeEventOnEnd) this.removeFingerSwipeEventListener(onTouchStart, onTouchMove)
action()
}
}
} else {
if (touchClientY > 0) {
if (direction === 'up') {
if (removeEventOnEnd) this.removeFingerSwipeEventListener(onTouchStart, onTouchMove)
action()
}
} else {
if (direction === 'down') {
if (removeEventOnEnd) this.removeFingerSwipeEventListener(onTouchStart, onTouchMove)
action()
}
}
}
}

document.addEventListener('touchstart', onTouchStart, false)
document.addEventListener('touchmove', onTouchMove, false)
}

private removeFingerSwipeEventListener (onTouchStart: (event: TouchEvent) => void, onTouchMove: (event: TouchEvent) => void) {
document.removeEventListener('touchstart', onTouchStart)
document.removeEventListener('touchmove', onTouchMove)
}

private refreshWindowInnerWidth () {
this.lastFunctionCallTime = new Date().getTime()

Expand Down

0 comments on commit c53283e

Please sign in to comment.