Files
MAD-Platform/lib/body-scroll-lock.ts
2026-02-16 14:43:02 +01:00

46 lines
1.1 KiB
TypeScript

'use client';
/**
* Gère le verrouillage du scroll du body quand des modales sont ouvertes.
* Gère plusieurs modales empilées via un compteur.
*/
let lockCount = 0;
let savedScrollY = 0;
export function lockBodyScroll() {
lockCount++;
if (lockCount === 1) {
savedScrollY = window.scrollY;
document.documentElement.style.overflow = 'hidden';
document.body.style.overflow = 'hidden';
document.body.style.position = 'fixed';
document.body.style.top = `-${savedScrollY}px`;
document.body.style.left = '0';
document.body.style.right = '0';
}
}
export function unlockBodyScroll() {
if (lockCount > 0) lockCount--;
if (lockCount === 0) {
document.documentElement.style.overflow = '';
document.body.style.overflow = '';
document.body.style.position = '';
document.body.style.top = '';
document.body.style.left = '';
document.body.style.right = '';
window.scrollTo(0, savedScrollY);
}
}
import { useEffect } from 'react';
export function useBodyScrollLock(isOpen: boolean) {
useEffect(() => {
if (isOpen) {
lockBodyScroll();
return () => unlockBodyScroll();
}
}, [isOpen]);
}