webroad.online
  1. 1Web
  2. 2HTML
  3. 3CSS
  4. 4JavaScript
  5. 5TypeScript
  6. 6Git
  7. 7Unelte
  8. 8React
  9. 9State management
  10. 10Next.js
  11. 11Formulare
  12. 12Date și backend
  13. 13SEO
  14. 14Tailwind CSS
  15. 15Animații
  16. 16Testare
  17. 17Arhitectură
Animații · Lecția 3 din 4

GSAP și ScrollTrigger

to/from/fromTo, timeline și parametrul de poziție, ScrollTrigger, useGSAP în React.

Actualizat

Ce este GSAP

GSAP (GreenSock Animation Platform) e librăria de animație folosită pe majoritatea site-urilor premiate (Awwwards): agenții, lansări de produs, scroll storytelling. Animă orice valoare numerică — CSS, SVG, canvas, obiecte JS — cu un control foarte fin asupra timpului. Din 2025, GSAP și toate plugin-urile (ScrollTrigger, SplitText, MorphSVG) sunt gratuite.

npm i gsap @gsap/react

Cele trei metode de bază

gsap.to('.box', { x: 200, rotation: 90, duration: 1, ease: 'power3.out' })   // de la starea actuală spre
gsap.from('.title', { y: 40, opacity: 0, duration: 0.6 })                    // de la valorile date spre starea actuală
gsap.fromTo('.bar', { scaleX: 0 }, { scaleX: 1, duration: 0.8 })             // ambele capete explicit
Opțiune Rol
duration secunde (nu milisecunde!)
ease 'power1.out' … 'power4.out', 'back.out(1.7)', 'elastic.out', 'none'
delay întârziere
stagger decalaj între elementele selectate: stagger: 0.08
repeat, yoyo repetare, dus-întors

x, y, rotation, scale sunt prescurtări pentru transform — performante.

Timeline — secvențe

Puterea GSAP: orchestrezi zeci de animații pe o axă de timp, fără delay-uri calculate de mână.

const tl = gsap.timeline({ defaults: { duration: 0.6, ease: 'power3.out' } })

tl.from('.logo', { y: -20, opacity: 0 })
  .from('.title', { y: 40, opacity: 0 }, '-=0.3')      // începe cu 0.3s înainte să se termine precedenta
  .from('.cta', { scale: 0.8, opacity: 0 }, '<')        // în același timp cu precedenta
  .from('.card', { y: 30, opacity: 0, stagger: 0.1 }, '+=0.2')
Poziție Înseamnă
(lipsă) după precedenta
'<' în același moment cu începutul precedentei
'+=0.2' / '-=0.3' la 0.2s după / cu 0.3s înainte de finalul precedentei
1.5 la secunda 1.5 absolut

Timeline-ul se poate controla: tl.pause(), tl.reverse(), tl.progress(0.5).

ScrollTrigger — animații legate de scroll

gsap.registerPlugin(ScrollTrigger)

gsap.from('.feature', {
  y: 60,
  opacity: 0,
  stagger: 0.15,
  scrollTrigger: { trigger: '.features', start: 'top 80%' },     // pornește când secțiunea ajunge la 80% din ecran
})

gsap.to('.hero-image', {
  scale: 1.3,
  scrollTrigger: { trigger: '.hero', start: 'top top', end: 'bottom top', scrub: true },  // legat de poziția scroll-ului
})
Opțiune Efect
start / end 'top 80%' = când partea de sus a trigger-ului atinge 80% din înălțimea ecranului
scrub: true animația urmează scroll-ul, înainte și înapoi
pin: true secțiunea stă fixă cât durează animația — scroll storytelling
markers: true arată liniile de start / end — doar la debugging

GSAP în React / Next: useGSAP

'use client'
import { useRef } from 'react'
import gsap from 'gsap'
import { ScrollTrigger } from 'gsap/ScrollTrigger'
import { useGSAP } from '@gsap/react'

gsap.registerPlugin(useGSAP, ScrollTrigger)

export function Hero() {
  const container = useRef<HTMLElement>(null)

  useGSAP(
    () => {
      gsap.from('.word', { y: '100%', opacity: 0, stagger: 0.05, ease: 'power4.out' })
    },
    { scope: container },          // selectorii caută doar în container
  )

  const { contextSafe } = useGSAP({ scope: container })
  const spin = contextSafe(() => gsap.to('.logo', { rotation: '+=360' }))   // animații din event handlers

  return <section ref={container}>...</section>
}

useGSAP face automat cleanup la demontare (și în Strict Mode) — fără el, animațiile și ScrollTrigger-ele rămân agățate între pagini.

Motion sau GSAP?

Motion GSAP
Stil declarativ, în JSX imperativ, timeline-uri
Puncte forte apariții / ieșiri, layout, gesturi, UI de aplicație secvențe lungi, scroll storytelling, text, SVG
Exit animations, layoutId da, nativ manual
Control fin al timpului bun excelent
Când aplicații, componente UI landing-uri, site-uri de prezentare, experiențe

Nu e obligatoriu să alegi: multe proiecte folosesc Motion pentru UI și GSAP pentru pagina de prezentare.

Pe scurt

  • gsap.to / from / fromTo cu duration în secunde, ease, stagger.
  • Timeline + parametrul de poziție ('<', '-=0.3') pentru secvențe.
  • ScrollTrigger pentru scroll (start, scrub, pin); în React mereu useGSAP cu scope.

Surse oficiale

Exerciții

Ți-a fost utilă pagina?

Un click — fără cont.