Interserver
IntersectionObserver simplified
Interserver
is an easy way to check if a dom element is intersecting the viewport.
Features
- Tiny (~1kb minified)
- TypeScript ready
- Framework agnostic (easily integrate
Interserver
with your favourite framework) - React companion package (
interserver-react
) - Svelte companion package (
interserver-svelte
)
Installation
With yarn
:
yarn add interserver
With npm
:
npm install --save interserver
Usage
import interserver from "interserver";
const container = document.querySelector("#container");
function handleChange(isIntersecting) {
if (isIntersecting) {
console.log("Container is visible!")
}
}
const unobserve = interserver(container, handleChange);
setTimeout(unobserve, 5000);
If you want to run cancel the observation after the first time, the container is visible, you can pass the once
option to interserver
:
import interserver from "interserver";
const container = document.querySelector("#container");
function handleChange(isIntersecting) {
if (isIntersecting) {
console.log("I will run only once.")
}
}
interserver(container, handleChange, { once: true });
You can also specify margins around the element (top
, right
, bottom
, left
), so that the handler will fire when the container is the specified margin away from the viewport:
import interserver from "interserver";
const container = document.querySelector("#container");
function handleChange(isIntersecting) {
if (isIntersecting) {
console.log("I will run when I am 20px away from the viewport.")
}
}
interserver(
container,
handleChange,
{ top: 20, right: 20, bottom: 20, left: 20 },
);
API
export type Interserver = (
container: Element,
onChange: InterserverOnChange,
options?: InterserverOptions,
) => InterserverUnsubscribe;
export type InterserverOnChange = (isIntersecting: boolean) => void;
export interface InterserverOptions {
top?: number;
right?: number;
bottom?: number;
left?: number;
once?: boolean;
}
export type InterserverUnsubscribe = () => void;
License
MIT