useViewport
Returns a Link containing an tuple of numbers representing the x and y position of the referenced element in the viewport. These numbers will range from 0 to 1 when the element is contained within the viewport.
page.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import { useViewport } from '@infinityfx/lively/hooks';
export default function Page() {
const [ref, link] = useViewport();
return <Animatable animate={{ rotate: link(([_, y]) => `${y * 360}deg`) }}>
<div ref={ref} style={{
width: 100,
height: 100,
borderRadius: 8,
backgroundColor: 'var(--f-clr-primary-100)'
}} />
</Animatable>;
}
Call signature
1
const [ref, link] = useViewport<T extends Element = any>(threshold)
Parameters
threshold?: number
The minimum percentage, as a number between 0 and 1, of the element that needs to be visible within the viewport for the returned position to range between 0 and 1.
default = 0.5
default = 0.5
Returns
link Link<[number, number]>
A link which can be used inside the animate property to create an animation.