GSAP Blur Text Reveal on Scroll | Elementor Flexbox Container Tutorial

Table of Contents

SHARE

স্ক্রল করার সাথে সাথে চমৎকার ব্লার-ইন টেক্সট ইফেক্ট তৈরি করতে চান? এই Elementor টিউটোরিয়ালে, আমরা আপনাকে দেখাব কিভাবে GSAP (GreenSock Animation Platform) ব্যবহার করে একটি Flexbox কন্টেইনারের মধ্যে টেক্সট অ্যানিমেট করতে হয়।

এই চোখ ধাঁধানো ইফেক্টটি হিরো সেকশন, হেডলাইন বা যেকোনো জায়গায় ব্যবহার করার জন্য উপযুক্ত যেখানে আপনি একটি শক্তিশালী প্রভাব ফেলতে চান। এর জন্য কোনো অ্যাডভান্সড কোডিং জ্ঞানের প্রয়োজন নেই! আমরা ধাপে ধাপে পুরো প্রক্রিয়াটি ভেঙে দেখাব, আপনার Elementor Flexbox কন্টেইনার সেট আপ করা থেকে শুরু করে GSAP অ্যানিমেশনের জন্য কাস্টম CSS এবং JavaScript কোড যোগ করা পর্যন্ত।

টিউটোরিয়াল শেষে আপনি যা পারবেন:

  • ✅ একটি মসৃণ, স্ক্রল-ট্রিগারযুক্ত টেক্সট ব্লার এবং রিভিল অ্যানিমেশন তৈরি করতে।
  • ✅ শক্তিশালী কাস্টম অ্যানিমেশনের জন্য Elementor-এর সাথে GSAP সংহত করতে।
  • ✅ কাস্টম JavaScript এবং CSS যোগ করতে Elementor-এর HTML উইজেট ব্যবহার করতে।
  • ✅ এই কৌশলগুলি আপনার ওয়ার্ডপ্রেস সাইটের যেকোনো টেক্সট এলিমেন্টে প্রয়োগ করতে।

প্রয়োজনীয় কোড

নিচের সম্পূর্ণ কোডটি কপি করে আপনার Elementor HTML উইজেটে পেস্ট করুন।

JavaScript (GSAP)
<!-- GSAP Library CDN Links -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.3/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.11.3/ScrollTrigger.min.js"></script>

<!-- Main Animation Script -->
<script>
document.addEventListener('DOMContentLoaded', function () {
  gsap.registerPlugin(ScrollTrigger);

  // Function to split text into spans for individual character animation
  function splitTextIntoSpans(selector) {
    const elements = document.querySelectorAll(selector);
    elements.forEach(element => {
      const text = element.innerText;
      element.innerHTML = ""; // Clear existing content to avoid duplication
      text.split("").forEach(char => {
        const span = document.createElement("span");
        span.style.display = "inline-block"; // Necessary for transforms
        span.style.opacity = "0";
        span.style.filter = "blur(8px)";
        span.style.transform = "translateX(-100px)";
        // Use a non-breaking space for actual spaces to maintain layout
        span.innerText = char === " " ? "\u00A0" : char; 
        element.appendChild(span);
      });
    });
  }

  // Apply the splitting function to all h4 elements
  // You can change "h4" to any other selector like ".animated-heading"
  splitTextIntoSpans("h4");

  // Animate each h4 element when it scrolls into view
  document.querySelectorAll("h4").forEach(h4 => {
    gsap.fromTo(h4.querySelectorAll("span"), {
      // Initial state (from)
      x: '-100%',
      filter: 'blur(8px)',
      opacity: 0,
    }, {
      // Final state (to)
      x: '0%',
      filter: 'blur(0)',
      opacity: 1,
      duration: 1.5,
      ease: "power4.out",
      stagger: 0.05, // Delay between each character animation
      scrollTrigger: {
        trigger: h4,
        start: "top 90%", // Animation starts when 90% of the viewport top hits the element
        end: "top 20%",   // Ensures animation completes as it scrolls up
        toggleActions: "restart none none reset",
        scrub: 1, // Smoothly scrubs the animation with scroll
        markers: false // Set to true for debugging scroll trigger positions
      },
    });
  });
});
</script>

A beautiful and organized website makes a business much more attractive to its buyers. If you want to build a website, contact me through one of the following means