merchi_product_editor
Version:
A React component for editing product images using Fabric.js
41 lines (34 loc) • 986 B
text/typescript
import { useRef, TouchEvent } from 'react';
interface SwipeNavigateOptions {
onSwipeLeft: () => void;
onSwipeRight: () => void;
threshold?: number;
}
export const useSwipeNavigate = ({ onSwipeLeft, onSwipeRight, threshold = 50 }: SwipeNavigateOptions) => {
const touchStartX = useRef(0);
const touchEndX = useRef(0);
const handleTouchStart = (e: TouchEvent<HTMLElement>) => {
touchStartX.current = e.touches[0].clientX;
touchEndX.current = 0;
};
const handleTouchEnd = (e: TouchEvent<HTMLElement>) => {
if (touchStartX.current === 0) {
return;
}
touchEndX.current = e.changedTouches[0].clientX;
const diff = touchStartX.current - touchEndX.current;
if (Math.abs(diff) > threshold) {
if (diff > 0) {
onSwipeLeft();
} else {
onSwipeRight();
}
}
touchStartX.current = 0;
touchEndX.current = 0;
};
return {
onTouchStart: handleTouchStart,
onTouchEnd: handleTouchEnd,
};
};