Unblur Text on Scroll

Cool unblur text effect when scrolling, build in Next.js using GSAP ScrollTrigger. The preview is in the bottom of this page.

  • Next.js
  • Typescript
  • GSAP
  • ScrollTrigger Plugin
  • SplitText Plugin
  • useGSAP Plugin
  • Tailwind CSS
components/animated-text.tsx
"use client";

import { ReactNode, useRef } from "react";
import gsap from "gsap";
import { SplitText } from "gsap/SplitText";
import { useGSAP } from "@gsap/react";
import { ScrollTrigger } from "gsap/ScrollTrigger";

gsap.registerPlugin(SplitText, ScrollTrigger, useGSAP);

export function AnimatedText({ children }: { children: ReactNode }) {
  const containerRef = useRef<HTMLDivElement | null>(null);

  useGSAP(
    () => {
      if (!containerRef.current) return;

      async function startAnimating() {
        await document.fonts.ready;

        SplitText.create(containerRef.current, {
          type: "lines",
          autoSplit: true,
          linesClass: "animated-line will-change-[opacity,filter]",
          onSplit: (self) => {
            gsap.set(self.lines, {
              filter: "blur(10px)",
              opacity: 0,
            });
            self.lines.forEach((line) => {
              gsap.to(line, {
                filter: "blur(0px)",
                opacity: 1,
                scrollTrigger: {
                  trigger: line,
                  start: "top 95%",
                  end: "top 50%",
                  scrub: true,
                },
              });
            });
          },
        });
      }

      startAnimating();
    },
    {
      scope: containerRef,
    }
  );

  return (
    <div ref={containerRef}>
      {children}
    </div>
  );
}

<AnimatedText>
  <p className="text-4xl text-center leading-tight">
    Lorem ipsum dolor sit, amet consectetur adipisicing elit. Explicabo
    ipsum culpa facere corrupti! Nobis suscipit in modi velit hic
    obcaecati facere laudantium, ipsa, nihil beatae harum commodi cumque
    eum optio.
  </p>
</AnimatedText>

Lorem ipsum dolor sit, amet consectetur adipisicing elit. Explicabo ipsum culpa facere corrupti! Nobis suscipit in modi velit hic obcaecati facere laudantium, ipsa, nihil beatae harum commodi cumque eum optio.