From cb13ebd116642b9500bb7a277a35730d78a7b4e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20Ca=C5=82a?= Date: Wed, 8 Nov 2023 20:15:00 +0100 Subject: [PATCH] refactored framer component, added animations to homepage menu and fixed issue related to rendering multiple framer components at once (don't do it, add a delay) --- src/app/about/page.tsx | 10 ++++- src/app/page.tsx | 41 ++++++++++++++++++--- src/components/framer/framerTextAnimate.tsx | 31 ++++++++++------ 3 files changed, 63 insertions(+), 19 deletions(-) diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx index b7d4f5f..b345029 100644 --- a/src/app/about/page.tsx +++ b/src/app/about/page.tsx @@ -10,7 +10,15 @@ const page = () => {
- {aboutMeText} + + {aboutMeText} +
); diff --git a/src/app/page.tsx b/src/app/page.tsx index 4ccd570..d1ec954 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,21 +1,50 @@ import Stars from "@/components/stars"; import Skeleton from "@/components/mesh/skeleton"; import Link from "next/link"; -import { Suspense } from "react"; +import FramerTextAnimate from "@/components/framer/framerTextAnimate"; + +const about = "ABOUT ME"; +const models = "MY MODELS"; +const contact = "CONTACT ME"; export default function Home() { return (
-
- - ABOUT ME + +
+ + + {about} + - MY MODELS + + {models} + - CONTACT + + {contact} +
diff --git a/src/components/framer/framerTextAnimate.tsx b/src/components/framer/framerTextAnimate.tsx index 70d818d..bab058f 100644 --- a/src/components/framer/framerTextAnimate.tsx +++ b/src/components/framer/framerTextAnimate.tsx @@ -1,15 +1,19 @@ "use client"; -import { Center } from "@react-three/drei"; import { animate, motion, useMotionValue, useTransform } from "framer-motion"; import { Special_Elite } from "next/font/google"; import React, { useEffect } from "react"; const special_elite = Special_Elite({ weight: "400", subsets: ["latin"] }); -type props = { children: string }; +type props = { + children: string; + styles: string; + duration: number; + delay: number; +}; -const FramerTextAnimate = ({ children }: props) => { +const FramerTextAnimate = ({ children, styles, duration, delay }: props) => { const count = useMotionValue(0); const baseText = children as string; @@ -19,19 +23,22 @@ const FramerTextAnimate = ({ children }: props) => { ); useEffect(() => { - const controls = animate(count, baseText.length, { - // type: "tween", // Not really needed because adding a duration will force "tween" - duration: 15, - ease: "easeInOut", - }); - return controls.stop; + // Delay the animation start + const delayTimeout = setTimeout(() => { + const controls = animate(count, baseText.length, { + duration: duration, + ease: "easeInOut", + }); + return () => controls.stop(); + }, delay * 1000); + + // Clear the timeout on unmount to prevent memory leaks + return () => clearTimeout(delayTimeout); }, []); return ( <> - + {displayText}