/
Bybaleshqa
/
Forktest
Обзор
Документация
Войти
/
Bybaleshqa
/
Forktest
Код
Запросы
1
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
packages/hooks/src/useBodyScrollLock/useBodyScrollLock.ts
50 строк
1 KB
Ivan Iakovlev
docs(hooks): добавлены stories по хукам
20 ноя 2024, 11:54
20 ноя 2024, 11:54
7538000
Код
Авторство
О чём код?
import * as React from 'react' import { enableBodyScroll, disableBodyScroll, BodyScrollOptions, } from 'body-scroll-lock' export interface UseBodyScrollLockResult<MountRefElement extends HTMLElement> { /** * Функция разблокировки скролла body */ enableBodyScroll: typeof enableBodyScroll /** * Функция блокировки скролла body */ disableBodyScroll: typeof disableBodyScroll /** * Ссылка на элемент, при монтировании которого будет блокироваться скролл */ lockOnMountNodeRef: (node: MountRefElement) => void } /** * Блокирует прокрутку тела страницы при монтировании элемента. */ export const useBodyScrollLock = < MountRefElement extends HTMLElement = HTMLDivElement >( options?: BodyScrollOptions ): UseBodyScrollLockResult<MountRefElement> => { const innerRef = React.useRef<MountRefElement | null>(null) const lockOnMountNodeRef = React.useCallback( (node: MountRefElement) => { if (node) { disableBodyScroll(node, { reserveScrollBarGap: true, ...options }) } else { enableBodyScroll(innerRef.current as MountRefElement) } innerRef.current = node }, [options] ) return { enableBodyScroll, disableBodyScroll, lockOnMountNodeRef, } }