webroad.online
  1. 1Веб
  2. 2HTML
  3. 3CSS
  4. 4JavaScript
  5. 5TypeScript
  6. 6Git
  7. 7Инструменты
  8. 8React
  9. 9Стейт-менеджмент
  10. 10Next.js
  11. 11Формы
  12. 12Данные и бэкенд
  13. 13SEO
  14. 14Tailwind CSS
  15. 15Анимации
  16. 16Тестирование
  17. 17Архитектура
Анимации · Урок 3 из 4

GSAP и ScrollTrigger

to/from/fromTo, таймлайн и параметр позиции, ScrollTrigger, useGSAP в React.

Обновлено

Что такое GSAP

GSAP (GreenSock Animation Platform) — библиотека анимаций, которую используют на большинстве сайтов-победителей Awwwards: агентства, запуски продуктов, сторителлинг на прокрутке. Она анимирует любое числовое значение — CSS, SVG, canvas, объекты JS — с очень тонким контролем времени. С 2025 года GSAP и все его плагины (ScrollTrigger, SplitText, MorphSVG) бесплатны.

npm i gsap @gsap/react

Три базовых метода

gsap.to('.box', { x: 200, rotation: 90, duration: 1, ease: 'power3.out' })   // от текущего состояния к
gsap.from('.title', { y: 40, opacity: 0, duration: 0.6 })                    // от заданных значений к текущему состоянию
gsap.fromTo('.bar', { scaleX: 0 }, { scaleX: 1, duration: 0.8 })             // оба конца явно
Опция Роль
duration секунды (не миллисекунды!)
ease 'power1.out' … 'power4.out', 'back.out(1.7)', 'elastic.out', 'none'
delay задержка
stagger сдвиг между выбранными элементами: stagger: 0.08
repeat, yoyo повтор, туда и обратно

x, y, rotation, scale — сокращения для transform, они производительны.

Таймлайн — последовательности

Сила GSAP: вы оркеструете десятки анимаций на оси времени без вручную посчитанных delay.

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')      // стартует за 0.3 с до конца предыдущей
  .from('.cta', { scale: 0.8, opacity: 0 }, '<')        // одновременно с предыдущей
  .from('.card', { y: 30, opacity: 0, stagger: 0.1 }, '+=0.2')
Позиция Означает
(нет) после предыдущей
'<' в момент старта предыдущей
'+=0.2' / '-=0.3' через 0.2 с после / за 0.3 с до конца предыдущей
1.5 на 1.5-й секунде, абсолютно

Таймлайном можно управлять: tl.pause(), tl.reverse(), tl.progress(0.5).

ScrollTrigger — анимации, привязанные к прокрутке

gsap.registerPlugin(ScrollTrigger)

gsap.from('.feature', {
  y: 60,
  opacity: 0,
  stagger: 0.15,
  scrollTrigger: { trigger: '.features', start: 'top 80%' },     // стартует, когда секция доходит до 80% экрана
})

gsap.to('.hero-image', {
  scale: 1.3,
  scrollTrigger: { trigger: '.hero', start: 'top top', end: 'bottom top', scrub: true },  // привязано к позиции прокрутки
})
Опция Эффект
start / end 'top 80%' = когда верх триггера доходит до 80% высоты экрана
scrub: true анимация следует за прокруткой вперёд и назад
pin: true секция остаётся зафиксированной, пока идёт анимация, — сторителлинг на прокрутке
markers: true показывает линии start / end — только для отладки

GSAP в 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 },          // селекторы ищут только внутри контейнера
  )

  const { contextSafe } = useGSAP({ scope: container })
  const spin = contextSafe(() => gsap.to('.logo', { rotation: '+=360' }))   // анимации из обработчиков событий

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

useGSAP автоматически делает очистку при размонтировании (и в Strict Mode) — без него анимации и ScrollTrigger-ы остаются висеть между страницами.

Motion или GSAP?

Motion GSAP
Стиль декларативный, в JSX императивный, таймлайны
Сильные стороны появление / уход, layout, жесты, интерфейс приложений длинные последовательности, сторителлинг на прокрутке, текст, SVG
Анимации ухода, layoutId да, нативно вручную
Тонкий контроль времени хороший отличный
Когда приложения, UI-компоненты лендинги, имиджевые сайты, интерактивы

Выбирать не обязательно: многие проекты используют Motion для интерфейса и GSAP для промо-страницы.

Коротко

  • gsap.to / from / fromTo с duration в секундах, ease, stagger.
  • Таймлайн + параметр позиции ('<', '-=0.3') для последовательностей.
  • ScrollTrigger для прокрутки (start, scrub, pin); в React — всегда useGSAP со scope.

Официальные источники

Упражнения

Была ли страница полезной?

Один клик — без регистрации.