Skip to content

GSAP

GSAP motion that feels premium and stays fast.

Good motion makes a site feel considered; bad motion makes it feel slow. These are the principles and patterns we use to make GSAP animation feel premium on client sites without hurting performance or accessibility.

Key takeaways3 min read

  • Animate transforms and opacity; avoid animating layout properties.
  • Use a small, shared set of eases and durations so motion feels like one system.
  • Scroll-linked scenes should explain something, not just decorate.
  • Every animation needs a reduced-motion version and proper cleanup.

01What makes motion feel premium

Premium motion is mostly restraint. It has a clear purpose — guiding attention, explaining a relationship, confirming an action — and it gets out of the way quickly.

  • Fast in, gentle settle: strong ease-outs (such as expo.out or power3.out) feel responsive and calm.
  • Short durations for interface feedback (roughly 0.2–0.4s), longer for large entrances (around 0.8–1.4s).
  • Small distances: content rising 20–40px reads as polished; content flying across the screen reads as busy.
  • Stagger groups so the eye can follow, but keep the total sequence short.

02Turn motion into a system

Define your eases, durations and distances once and reuse them everywhere, the same way you treat colour and type. When every section uses the same vocabulary, the site feels designed as a whole.

Example motion tokens
// motion tokens
export const ease = { out: "expo.out", inOut: "power2.inOut" };
export const dur = { quick: 0.3, base: 0.9, slow: 1.4 };
export const rise = 32; // px for entrance reveals

Data attributes are a useful pattern on top of tokens: mark an element with data-reveal="fade-up" and let one shared script handle it. Pages then get consistent motion without per-page animation code.

03Performance rules

Browsers can animate transform and opacity cheaply. Animating width, height, top, left or margins forces layout work on every frame and is the most common cause of janky motion.

  • Animate x, y, scale, rotate and opacity — or autoAlpha, which also toggles visibility.
  • Use will-change sparingly, and only on elements that are about to animate.
  • Defer heavy media and start video only when it is in view.
  • Test on a mid-range phone, not only on a fast laptop.
  • Load only the GSAP plugins each page actually uses.

04Scroll-driven scenes that earn their place

ScrollTrigger makes it easy to pin sections and scrub timelines with the scrollbar. Used well, it tells a story in chapters; used everywhere, it makes a page feel like a trap.

  1. 01Give each pinned scene one idea to explain.
  2. 02Keep pinned distances modest so readers never feel stuck.
  3. 03Add a little smoothing to scrubbing (for example scrub: 0.6–1) so motion feels fluid rather than mechanical.
  4. 04Make sure the content still makes sense if the reader scrolls fast or jumps with the keyboard.
  5. 05Recalculate on resize, and check every scene at narrow widths.

05GSAP in React and Next.js

In React, animations must be created after the elements exist and cleaned up when components unmount or routes change — otherwise you get duplicated tweens and stray ScrollTriggers. The official useGSAP hook from @gsap/react handles this by scoping selectors to a container and reverting everything it created on cleanup.

gsap.matchMedia() is the other essential tool. Wrap animations in media queries so they only run where they should — and are reverted automatically when the condition stops matching.

06Reduced motion is not optional

Some people experience discomfort or nausea from movement on screen and ask their operating system to reduce motion. Respect that setting by checking prefers-reduced-motion and serving a calm version: content visible immediately, no parallax, no scrubbed scenes, and simple fades at most.

Next · Agency sales

How to sell GEO and AI websites to your existing clients

Read the guide

Put it into practice

Ready to put this into practice?

If you’d rather we did the work for your clients, under your brand, tell us what you need.

What can we help with?

We use these details only to reply to your enquiry. See our privacy policy.