GSAP Scroll Animation Scoping


I’m building scroll-triggered animations on my site using Webflow’s new GSAP UI and running into a frustrating issue.

I want to apply a single animation to a class and have each instance of that class animate individually when it enters the viewport — similar to how a forEach loop would behave in custom GSAP code.

However, when I apply the animation to the class, every instance animates at once as soon as the first one scrolls into view. I’ve tried using different scope settings (children, siblings, descendants, etc.), and even custom selectors with attributes, but nothing seems to isolate the animation per element.

My goal is to reuse one animation setup throughout my site, while ensuring each instance is only triggered when it becomes visible.

Has anyone successfully achieved this in the GSAP UI without writing custom JS?

Here is my public share link: LINK

1 Like

Hey @Gabriel-Dufresne

I checked your link, but it seems like you got this working by using the descendants selector, and passing .awards_row_line is that correct?

1 Like

Hey @magicmark Yes!
I did figure it out in the end.

For those curious, the part I was missing was to target the trigger’s children using the descendants scope.

Thanks for taking the time

2 Likes

Could you elaborate more on the solution? I haven’t managed to solve it. Where do you select descendants, is it on the trigger scope or on the target scope or on both? I’m trying to animate an element (class) inside a card every time the card scrolls into view, but no matter what settings I choose, every time a new card appears on screen, the animation is triggered on all cards.

Hey @paco ,

Gabriel-Dufresne had set the scope of the trigger to all matching elements based on an attribute.

And then set the action’s target scope as descendants with the relevant class selector.

You can take a look at their site’s read-only link to explore how they made the interaction work.

Hope this helps.

Thanks! It actually helped a lot. Is it just me or does this implementation feels kind of awkward? Setting scopes both for triggers and for targets and not being able to select classes feels counterintuitive.