Для работы с плагином animation.gsap требуется наличие
двух библиотек: ScrollMagic и GSAP
(GreenSock Animation Platform). Подключение обычно осуществляется через
<script> или через npm-пакеты:
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.2/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.8/ScrollMagic.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.8/plugins/animation.gsap.min.js"></script>
Важно подключать GSAP до ScrollMagic animation.gsap, так как плагин использует методы GSAP для анимаций.
Контроллер управляет всеми сценами ScrollMagic и синхронизирует их с прокруткой страницы:
const controller = new ScrollMagic.Controller();
Контроллер может быть один на страницу, хотя допустимо создание нескольких контроллеров для разных блоков с независимым поведением.
Сцена (ScrollMagic.Scene) определяет, когда и
как анимация запускается. Основные параметры:
triggerElement — элемент, при котором начинается
анимация.duration — длина прокрутки, на протяжении которой
анимация выполняется.offset — смещение относительно
triggerElement.Пример интеграции с GSAP:
const tween = gsap.to(".box", { x: 500, rotation: 360, duration: 2 });
const scene = new ScrollMagic.Scene({
triggerElement: ".trigger",
duration: 400,
offset: 50
})
.setTween(tween)
.addTo(controller);
Пояснения к коду:
gsap.to() создаёт анимацию, которая изменяет свойства
элемента .box..setTween(tween) связывает анимацию с сценой
ScrollMagic. При прокрутке страницы анимация будет проигрываться в
зависимости от положения скролла..addTo(controller) добавляет сцену в контроллер для
отслеживания.animation.gsap поддерживает несколько вариантов
контроля:
scene.on("enter", () => tween.play());
scene.on("leave", () => tween.reverse());
const pinScene = new ScrollMagic.Scene({
triggerElement: ".section",
duration: 600
})
.setPin(".section-content")
.setTween(gsap.to(".section-content", { y: -200, opacity: 0.5 }))
.addTo(controller);
.setPin() «приковывает» элемент к окну браузера.const tl = gsap.timeline();
tl.to(".box1", { x: 200, duration: 1 });
tl.to(".box2", { y: 100, duration: 1 });
new ScrollMagic.Scene({
triggerElement: ".trigger",
duration: 500
})
.setTween(tl)
.addTo(controller);
Использование timeline позволяет создавать комплексные эффекты без необходимости создавать отдельные сцены для каждого элемента.
ease — функция сглаживания анимации
(power1.inOut, linear,
elastic.out).overwrite — управляет конфликтами анимаций одного
элемента.paused — позволяет задать начальное состояние
анимации.gsap.to(".box", {
x: 300,
rotation: 180,
duration: 2,
ease: "power2.out",
paused: true
});
Затем привязка к ScrollMagic:
scene.setTween(tween);
ScrollMagic поддерживает визуальный дебаг:
scene.addIndicators({
name: "Example",
colorTrigger: "blue",
colorStart: "green",
colorEnd: "red"
});
triggerElement, начало и конец
сцены.setPin для больших блоков,
чтобы избежать торможения прокрутки.duration сцены можно задавать в пикселях или проценте
высоты окна, комбинируя с медиазапросами для адаптивного дизайна.Можно использовать ScrollMagic.Scene.addIndicators()
совместно с GSAP для отладки сложных таймлайнов.
ScrollMagic совместим с плагинами GSAP (ScrollTrigger можно применять в проектах с ScrollMagic для дополнительных возможностей).
Пример комплексного эффекта: параллакс + появление + вращение:
const tl = gsap.timeline();
tl.from(".image", { y: 100, opacity: 0, duration: 1 });
tl.to(".image", { rotation: 15, duration: 1 });
new ScrollMagic.Scene({
triggerElement: ".section",
duration: 800
})
.setTween(tl)
.setPin(".section")
.addIndicators()
.addTo(controller);
Эта комбинация создаёт плавное появление изображения, лёгкое вращение и фиксирует блок на экране на время анимации, обеспечивая эффект интерактивного параллакса.