44 lines
865 B
TypeScript
44 lines
865 B
TypeScript
"use client";
|
|
|
|
import React, { useEffect, useRef } from "react";
|
|
import Lenis from "lenis";
|
|
|
|
export default function LenisProvider({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode;
|
|
}) {
|
|
const lenisRef = useRef<Lenis | null>(null);
|
|
|
|
useEffect(() => {
|
|
// Initialize Lenis
|
|
const lenis = new Lenis({
|
|
duration: 1.2,
|
|
easing: (t) => Math.min(1, 1.001 - Math.pow(2, -10 * t)),
|
|
orientation: "vertical",
|
|
gestureOrientation: "vertical",
|
|
smoothWheel: true,
|
|
wheelMultiplier: 1,
|
|
touchMultiplier: 1.5,
|
|
});
|
|
|
|
lenisRef.current = lenis;
|
|
|
|
// RAF loop
|
|
function raf(time: number) {
|
|
lenis.raf(time);
|
|
requestAnimationFrame(raf);
|
|
}
|
|
|
|
requestAnimationFrame(raf);
|
|
|
|
// Bind clean-up
|
|
return () => {
|
|
lenis.destroy();
|
|
lenisRef.current = null;
|
|
};
|
|
}, []);
|
|
|
|
return <>{children}</>;
|
|
}
|