const MIN_DISTANCE = 10
const getDirection = (x, y) => {
if (x > y && x > MIN_DISTANCE) return 'horizontal'
if (y > x && y > MIN_DISTANCE) return 'vertical'
return ''
}
export function useTouch({ ref }) {
const startX = ref(0)
const startY = ref(0)
const moveX = ref(0)
const moveY = ref(0)
const deltaX = ref(0)
const deltaY = ref(0)
const offsetX = ref(0)
const offsetY = ref(0)
const direction = ref('')
const isVertical = () => direction.value === 'vertical'
const isHorizontal = () => direction.value === 'horizontal'
const move = (event) => {
const touchEvent = event.touches[0]
deltaX.value = touchEvent.clientX - startX.value
deltaY.value = touchEvent.clientY - startY.value
moveY.value = touchEvent.clientY
moveX.value = touchEvent.clientX
offsetY.value = Math.abs(deltaY.value)
offsetX.value = Math.abs(deltaX.value)
if (!direction.value) {
direction.value = getDirection(offsetX.value, offsetY.value)
}
}
const reset = () => {
deltaX.value = 0
offsetX.value = 0
offsetY.value = 0
deltaY.value = 0
direction.value = ''
}
const start = (event) => {
reset()
startY.value = event.touches[0].clientY
startX.value = event.touches[0].clientX
}
return {
start,
move,
reset,
startY,
startX,
moveY,
moveX,
deltaY,
deltaX,
offsetY,
offsetX,
isVertical,
direction,
isHorizontal
}
}