/
levkin_s
/
ui-kit-ce
Обзор
Документация
Войти
/
levkin_s
/
ui-kit-ce
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
develop
packages/hooks/src/useBodyScrollLock/useBodyScrollLock.ts
50 строк
1 KB
Denis Svyatovets
v1.10.0
27 мар 2024, 13:48
27 мар 2024, 13:48
c9029ae
Код
Авторство
О чём код?
import * as React from 'react' import { enableBodyScroll, disableBodyScroll, BodyScrollOptions, } from 'body-scroll-lock' 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, } }