Для эффективного использования ScrollMagic в сочетании с анимациями важно правильно подключить библиотеку GreenSock (GSAP). GSAP предоставляет мощный инструмент для создания анимаций, который ScrollMagic использует через свои сцены для управления движением элементов при прокрутке страницы.
Наиболее простой способ интеграции GSAP — использование CDN. Необходимо подключить core-библиотеку GSAP и при необходимости дополнительные плагины, например, ScrollTrigger или CSSPlugin. Пример подключения:
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.14.0/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.14.0/ScrollTrigger.min.js"></script>
Важно подключать GSAP до инициализации ScrollMagic, чтобы можно было использовать анимации внутри сцен.
Для проектов на Node.js или при использовании сборщиков модулей (Webpack, Parcel, Vite) GSAP устанавливается через npm:
npm install gsap
После установки можно импортировать библиотеку в коде:
import { gsap } from "gsap";
import { ScrollTrigger } from "gsap/ScrollTrigger";
gsap.registerPlugin(ScrollTrigger);
Регистрация плагина ScrollTrigger необходима, если планируется использование анимаций с привязкой к скроллу.
ScrollMagic сам по себе не выполняет анимации, он управляет триггерами и сценами. Для анимаций элементов при прокрутке используется GSAP. Основной принцип интеграции:
const controller = new ScrollMagic.Controller();
const tween = gsap.to(".box", { duration: 1, x: 300, rotation: 360 });
const scene = new ScrollMagic.Scene({
triggerElement: ".trigger",
duration: 500,
triggerHook: 0.5
})
.setTween(tween)
.addTo(controller);
Ключевые параметры сцены:
triggerElement — элемент, с которого начинается
анимация.duration — длина анимации относительно прокрутки (в
пикселях или процентах страницы).triggerHook — точка на экране, где срабатывает триггер
(0 — верх экрана, 1 — низ экрана).GSAP позволяет объединять несколько анимаций в таймлайны, что особенно удобно при работе со ScrollMagic:
const timeline = gsap.timeline();
timeline.to(".box1", { x: 200, opacity: 0.5, duration: 1 });
timeline.to(".box2", { y: 100, scale: 1.5, duration: 1 });
const scene = new ScrollMagic.Scene({
triggerElement: ".trigger",
duration: 600
})
.setTween(timeline)
.addTo(controller);
Использование таймлайнов позволяет синхронизировать последовательные анимации и упрощает управление сложными эффектами.
По умолчанию ScrollMagic воспроизводит анимацию в прямом и
обратном направлении при прокрутке вверх и вниз. Для анимаций,
которые должны останавливаться или повторяться, можно использовать опцию
reverse:
const scene = new ScrollMagic.Scene({
triggerElement: ".trigger",
duration: 400,
reverse: false // Анимация выполняется только один раз
})
.setTween(gsap.to(".box", { x: 200, duration: 1 }))
.addTo(controller);
При работе с контентом, который загружается динамически, важно вызывать update() для контроллера после добавления новых элементов:
controller.update(true);
Это гарантирует правильное вычисление позиции триггеров и синхронизацию анимаций.
GSAP 3 и ScrollMagic поддерживают современную синтаксическую интеграцию:
gsap.to(".box", { x: 100, opacity: 0.5 }))ScrollTrigger.matchMediawill-change: transform для анимируемых
элементов, чтобы включить аппаратное ускорение.<!-- GSAP Core -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.14.0/gsap.min.js"></script>
<!-- GSAP ScrollTrigger (если нужен) -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.14.0/ScrollTrigger.min.js"></script>
<!-- ScrollMagic -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.7/ScrollMagic.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.7/plugins/animation.gsap.min.js"></script>
Эта комбинация обеспечивает полный контроль над анимациями при скролле, позволяя создавать плавные, отзывчивые и сложные эффекты на любой странице.