|
import { animate, ValueAnimationTransition } from "framer-motion"; |
|
import { useRef } from "react"; |
|
|
|
export function useScrollTo() { |
|
let ref = useRef<HTMLDivElement>(null); |
|
|
|
function scrollTo(options: ValueAnimationTransition = {}) { |
|
if (!ref.current) return; |
|
|
|
let defaultOptions: ValueAnimationTransition = { |
|
type: "spring", |
|
bounce: 0, |
|
duration: 0.6, |
|
}; |
|
|
|
animate(window.scrollY, ref.current.offsetTop, { |
|
...defaultOptions, |
|
...options, |
|
onUpdate: (latest) => window.scrollTo({ top: latest }), |
|
}); |
|
} |
|
|
|
return [ref, scrollTo] as const; |
|
} |
|
|