useIntersectionObserver
A React hook that uses the IntersectionObserver API to detect when an element is in view.
Installation
npm install @madeinhaus/hooks
Import
import { useIntersectionObserver } from '@madeinhaus/hooks';
Parameters
options
(IntersectionObserverOptions, optional): An optional object that can contain the following properties:once
(boolean, default: true): If false, the observer will continue observing the element after it first becomes visible. If true (default), the observer will unobserve the element after it first becomes visible.root
(Element | Document, optional): The element that is used as the viewport for checking visibility of the target. Defaults to the browser viewport if not specified or ifnull
.rootMargin
(string, optional): Margin around the root element. Can have values similar to the CSS margin property. Defaults to all zeros if not specified or ifnull
.threshold
(number | number[], optional): Either a single number or an array of numbers which indicate at what percentage of the target's visibility the observer's callback should be executed. Defaults to0
if not specified or ifnull
.
Returns
inView
(boolean): A boolean indicating if the component is in view.ref
(function): A callback ref that you pass to the element's ref prop.elRef
(Ref): A ref object that you can use to access the element if needed.
Usage
import { useIntersectionObserver } from '@madeinhaus/hooks';
function MyComponent() {
const [inView, ref] = useIntersectionObserver({
once: false,
rootMargin: '0px 0px -100px 0px',
threshold: 0.5,
});
return (
<div ref={ref}>
{inView ? 'In view' : 'Not in view'}
</div>
);
}
In this example, we import the useIntersectionObserver
hook from the @madeinhaus/hooks
package and use it to detect when a div element is in view.