useIsInViewport
hookas/use-is-in-viewportFreeHook
A hook to check if an element is in the viewport
Install it
npx shadcn@latest add https://hookas.letstri.dev/r/use-is-in-viewport.jsonSource
1'use client'23import * as React from 'react'45export function useIsInViewport(6 ref: React.RefObject<Element | null>,7 visibility: 'full' | 'partial' | number = 'partial',8) {9 const [isVisible, setIsVisible] = React.useState(false)1011 React.useEffect(() => {12 if (!ref.current)13 return1415 const observer = new IntersectionObserver(16 ([entry]) => {17 setIsVisible(entry.isIntersecting)18 },19 {20 threshold: typeof visibility === 'number' ? visibility : visibility === 'full' ? 1 : 0,21 },22 )2324 observer.observe(ref.current)2526 return () => {27 observer.disconnect()28 }29 }, [ref, visibility])3031 return isVisible32}
Files it writes
More from hookas
All 30 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| useAsyncEffectuse-async-effect | hookas | Hooks | Free | no deps | |
| useClickOutsideuse-click-outside | hookas | Hooks | Free | no deps | |
| useDebounceCallbackuse-debounced-callback | hookas | Hooks | Free | no deps | |
| useDebounceMemouse-debounced-memo | hookas | Hooks | Free | no deps | |
| useDebounceStateuse-debounced-state | hookas | Hooks | Free | no deps | |
| useElementSizeuse-element-size | hookas | Hooks | Free | no deps | |
| useFullscreenuse-fullscreen | hookas | Hooks | Free | no deps | |
| useIntervaluse-interval | hookas | Hooks | Free | no deps |
