/
arseniy985
/
QuantaAI
Обзор
Документация
Войти
/
arseniy985
/
QuantaAI
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
src/shared/hooks/useInView.ts
38 строк
959 B
vorxntsovv
Update landing copy and optimize section animations
20 янв 2026, 20:28
20 янв 2026, 20:28
12021e7
Код
Авторство
О чём код?
import { useEffect, useState } from 'react'; import type { RefObject } from 'react'; type InViewOptions = IntersectionObserverInit & { initialInView?: boolean }; export function useInView<T extends Element>( ref: RefObject<T | null>, options: InViewOptions = {}, ) { const { root = null, rootMargin = '0px', threshold = 0, initialInView = true, } = options; const [isInView, setIsInView] = useState(initialInView); useEffect(() => { const element = ref.current; if (!element || typeof IntersectionObserver === 'undefined') { return undefined; } const observer = new IntersectionObserver( (entries) => { const entry = entries[0]; if (!entry) return; setIsInView(entry.isIntersecting); }, { root, rootMargin, threshold }, ); observer.observe(element); return () => observer.disconnect(); }, [ref, root, rootMargin, threshold]); return isInView; }