diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx index bc4f4bd..b7d4f5f 100644 --- a/src/app/about/page.tsx +++ b/src/app/about/page.tsx @@ -1,10 +1,17 @@ import Stars from "@/components/stars"; import React from "react"; +import FramerTextAnimate from "@/components/framer/framerTextAnimate"; + +const aboutMeText = + "I am a one-person studio with over 1.5 years of experience in organic 3D modeling and resin 3D printing. My work primarily focuses on themes of alien/cosmic horror, although I often strain towards classic themes of daemonic fiends and monsters from high fantasy. Most of conceptual work is done in Blender, while i tend to incorporate ZBRUSH for the rest of the process."; const page = () => { return (
+
+ {aboutMeText} +
); }; diff --git a/src/app/contact/page.tsx b/src/app/contact/page.tsx index bc4f4bd..fbdd8bd 100644 --- a/src/app/contact/page.tsx +++ b/src/app/contact/page.tsx @@ -5,6 +5,7 @@ const page = () => { return (
+
); }; diff --git a/src/components/framer/framerTextAnimate.tsx b/src/components/framer/framerTextAnimate.tsx new file mode 100644 index 0000000..70d818d --- /dev/null +++ b/src/components/framer/framerTextAnimate.tsx @@ -0,0 +1,41 @@ +"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 }; + +const FramerTextAnimate = ({ children }: props) => { + const count = useMotionValue(0); + const baseText = children as string; + + const rounded = useTransform(count, (latest) => Math.round(latest)); + const displayText = useTransform(rounded, (latest) => + baseText.slice(0, latest) + ); + + 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; + }, []); + + return ( + <> + + {displayText} + + + ); +}; + +export default FramerTextAnimate;