21 lines
570 B
TypeScript
21 lines
570 B
TypeScript
"use client";
|
||
|
||
import { useEffect } from "react";
|
||
|
||
// 弹层(Drawer / CommandPalette / Modal)打开时锁定 body 滚动,关闭后恢复原值。
|
||
// SSR 守卫:服务端无 document,直接跳过。
|
||
export function useBodyScrollLock(active: boolean): void {
|
||
useEffect(() => {
|
||
if (!active) return;
|
||
if (typeof document === "undefined") return;
|
||
|
||
const { body } = document;
|
||
const previousOverflow = body.style.overflow;
|
||
body.style.overflow = "hidden";
|
||
|
||
return () => {
|
||
body.style.overflow = previousOverflow;
|
||
};
|
||
}, [active]);
|
||
}
|