export const useTouchEvent = (target: any, upCallback?: any, rightCallback?: any, downCallback?: any, leftCallback?: any) => {
let startX: any;
let startY: any;
const handleTouchEvent = (event: TouchEvent) => {
let spanX = event.changedTouches[0].pageX - startX;
let spanY = event.changedTouches[0].pageY - startY;
switch (event.type) {
case "touchstart":
startX = event.touches[0].pageX;
startY = event.touches[0].pageY;
break;
case "touchend":
if (Math.abs(spanX) > Math.abs(spanY) && spanX > 30) {
console.log("向右");
rightCallback?.();
} else if (Math.abs(spanX) > Math.abs(spanY) && spanX < -30) {
console.log("向左");
leftCallback?.();
} else if (Math.abs(spanX) < Math.abs(spanY) && spanY > 30) {
console.log("向下");
downCallback?.();
} else if (Math.abs(spanX) < Math.abs(spanY) && spanY < -30) {
console.log("向上");
upCallback?.();
}
break;
case "touchmove":
Math.abs(spanX) > Math.abs(spanY) && event.cancelable && event.preventDefault();
break;
}
};
onMounted(() => {
target?.addEventListener("touchstart", handleTouchEvent);
target?.addEventListener("touchend", handleTouchEvent);
target?.addEventListener("touchmove", handleTouchEvent, { passive: false });
})
onUnmounted(() => {
target?.removeEventListener("touchstart", handleTouchEvent);
target?.removeEventListener("touchend", handleTouchEvent);
target?.removeEventListener("touchmove", handleTouchEvent);
})
};