Skip to content

GSAP + Finsweet Filtering/Load Issue Explanation #760

@Agha-pixel

Description

@Agha-pixel

Hey! I’m currently working on this website and wanted to walk through an issue I'm running into.

I'm using GSAP animations across the site — mainly reveal and scroll-trigger effects — and on regular pages, everything works perfectly.

For my reveal animation, I’m currently using Webflow’s new GSAP animation panel, not a custom code animation. Let me know if this issue can be completely resolved by switching to a GSAP reveal animation with code — if that’s the better and more stable approach, I’m totally open to doing that.

Now, the problem happens on pages where I'm using Finsweet CMS Attributes, specifically the Filter + Load More setup.

When I click Load More, new CMS items load correctly, but the reveal animation does not trigger on those new items. They just appear with no animation — but I need them to animate exactly like the initial batch does.

Also, when filtering , some scroll animations lower on the page stop working — especially the footer animation section.

To confirm the issue:
If I completely remove the Finsweet script, all animations work fine again. So it's definitely related to CMS load + filter interfering with GSAP initialization.

So what I need help with is:

  1. Re-triggering the reveal animation after Load More
  2. Re-initializing scroll animations after filtering
  3. Basically refreshing GSAP when new CMS items are injected into the DOM

Thanks in advance — would really appreciate guidance on the correct event hooks or methods for re-initializing GSAP here.


🔗 Links

Loom video: https://www.loom.com/share/dd1886522cf340a088e7cbedcb20849d
Live page: https://underbite-staging.webflow.io/insights-more


📌 Footer Animation Code

<script>

gsap.registerPlugin(ScrollTrigger);

function initFooterParallax(){
  document.querySelectorAll('[data-footer-parallax]').forEach(el => {
    const tl = gsap.timeline({
      scrollTrigger: {
        trigger: el,
        start: 'clamp(top bottom)',
        end: 'clamp(top top)',
        scrub: true
      }
    });
  
    const inner = el.querySelector('[data-footer-parallax-inner]');
    const dark  = el.querySelector('[data-footer-parallax-dark]');
  
    if (inner) {
      tl.from(inner, {
        yPercent: -25,
        ease: 'linear'
      });
    }
  
    if (dark) {
      tl.from(dark, {
        opacity: 0.5,
        ease: 'linear'
      }, '<');
    }
  });
}

// Initialize Footer with Parallax Effect
document.addEventListener('DOMContentLoaded', () => {
  initFooterParallax();
});

</script>

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions