fix: improve touch gesture handling in usePageNavigation hook and add img element eslint directive in ZoomablePage component
This commit is contained in:
@@ -60,6 +60,7 @@ export const ZoomablePage = ({
|
|||||||
wrapperClass="w-full h-full flex items-center justify-center"
|
wrapperClass="w-full h-full flex items-center justify-center"
|
||||||
contentClass="cursor-pointer"
|
contentClass="cursor-pointer"
|
||||||
>
|
>
|
||||||
|
{/* eslint-disable-next-line @next/next/no-img-element */}
|
||||||
<img
|
<img
|
||||||
src={pageUrl}
|
src={pageUrl}
|
||||||
alt={`Page ${pageNumber}`}
|
alt={`Page ${pageNumber}`}
|
||||||
|
|||||||
@@ -133,15 +133,25 @@ export const usePageNavigation = ({
|
|||||||
|
|
||||||
const handleTouchStart = useCallback(
|
const handleTouchStart = useCallback(
|
||||||
(event: TouchEvent) => {
|
(event: TouchEvent) => {
|
||||||
|
// Ne gérer que les gestes à un seul doigt
|
||||||
|
if (event.touches.length === 1) {
|
||||||
touchStartXRef.current = event.touches[0].clientX;
|
touchStartXRef.current = event.touches[0].clientX;
|
||||||
touchStartYRef.current = event.touches[0].clientY;
|
touchStartYRef.current = event.touches[0].clientY;
|
||||||
currentPageRef.current = currentPage;
|
currentPageRef.current = currentPage;
|
||||||
|
} else {
|
||||||
|
// Reset les références pour les gestes multi-touch (pinch)
|
||||||
|
touchStartXRef.current = null;
|
||||||
|
touchStartYRef.current = null;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
[currentPage]
|
[currentPage]
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleTouchEnd = useCallback(
|
const handleTouchEnd = useCallback(
|
||||||
(event: TouchEvent) => {
|
(event: TouchEvent) => {
|
||||||
|
// Ne traiter que les gestes à un seul doigt
|
||||||
|
if (event.touches.length > 1) return;
|
||||||
|
|
||||||
if (touchStartXRef.current === null || touchStartYRef.current === null) return;
|
if (touchStartXRef.current === null || touchStartYRef.current === null) return;
|
||||||
|
|
||||||
const touchEndX = event.changedTouches[0].clientX;
|
const touchEndX = event.changedTouches[0].clientX;
|
||||||
@@ -153,8 +163,8 @@ export const usePageNavigation = ({
|
|||||||
// on ne fait rien (pour éviter de confondre avec un scroll)
|
// on ne fait rien (pour éviter de confondre avec un scroll)
|
||||||
if (Math.abs(deltaY) > Math.abs(deltaX)) return;
|
if (Math.abs(deltaY) > Math.abs(deltaX)) return;
|
||||||
|
|
||||||
// On vérifie si le déplacement est suffisant pour changer de page
|
// Augmenter le seuil pour éviter les changements de page accidentels
|
||||||
if (Math.abs(deltaX) > 50) {
|
if (Math.abs(deltaX) > 100) {
|
||||||
if (deltaX > 0) {
|
if (deltaX > 0) {
|
||||||
// Swipe vers la droite
|
// Swipe vers la droite
|
||||||
if (isRTL) {
|
if (isRTL) {
|
||||||
|
|||||||
Reference in New Issue
Block a user