ScrollMagic — библиотека для управления анимациями при скролле, позволяющая связывать DOM-элементы с поведением страницы. Параллельные анимации представляют собой одновременное выполнение нескольких анимационных эффектов на разных элементах или группах элементов в ответ на одно и то же событие прокрутки.
Ключевой инструмент для создания параллельных анимаций —
TimelineMax или TimelineLite из
библиотеки GSAP. ScrollMagic напрямую интегрируется с этими таймлайнами
через объект Scene, что позволяет синхронизировать
прокрутку с множеством анимаций.
// Инициализация контроллера ScrollMagic
var controller = new ScrollMagic.Controller();
// Создание таймлайна для параллельных анимаций
var timeline = gsap.timeline();
// Добавление параллельных анимаций
timeline.to("#box1", {x: 200, duration: 2}, 0) // начало анимации в момент 0
.to("#box2", {y: 150, duration: 2}, 0) // синхронная анимация с box1
.to("#box3", {opacity: 0.5, duration: 2}, 0); // параллельная анимация
// Привязка таймлайна к сцене ScrollMagic
var scene = new ScrollMagic.Scene({
triggerElement: "#trigger",
duration: 400, // длина анимации относительно скролла
triggerHook: 0.5
})
.setTween(timeline)
.addTo(controller);
Объяснение ключевых моментов:
timeline.to(..., 0) — третий параметр
0 устанавливает синхронный старт всех анимаций в одном
моменте таймлайна. Если задать разные значения, анимации будут смещены
во времени.duration внутри to()
управляет фактической длительностью анимации, но ScrollMagic
масштабирует её относительно duration сцены.triggerHook задаёт точку на экране,
где начинается анимация (0 — верх страницы, 1 — низ страницы).Для более сложных параллельных анимаций можно добавлять смещения, чтобы анимации начинались почти одновременно, но с небольшим лагом:
timeline.to("#box1", {x: 200, duration: 2}, 0)
.to("#box2", {y: 150, duration: 2}, 0.3) // начнется чуть позже
.to("#box3", {scale: 1.5, duration: 2}, 0.5);
Такой подход позволяет создавать эффект каскадного появления элементов при прокрутке.
При больших проектах параллельные анимации удобно структурировать:
// Анимации для заголовков
var headersTimeline = gsap.timeline();
headersTimeline.from(".header", {y: -50, opacity: 0, stagger: 0.2});
// Анимации для блоков контента
var contentTimeline = gsap.timeline();
contentTimeline.from(".content-item", {x: -100, opacity: 0, stagger: 0.3});
// Общий таймлайн
var mainTimeline = gsap.timeline();
mainTimeline.add(headersTimeline, 0)
.add(contentTimeline, 0); // обе группы стартуют одновременно
Использование stagger позволяет
одновременно запускать анимацию нескольких элементов с заданным
интервалом, создавая естественный эффект движения.
Можно комбинировать элементы с различной длительностью в одном таймлайне:
timeline.to("#box1", {x: 300, duration: 3}, 0)
.to("#box2", {y: 200, duration: 1.5}, 0)
.to("#box3", {rotation: 360, duration: 2}, 0);
ScrollMagic автоматически масштабирует скорость анимаций относительно длины сцены, что позволяет сохранить синхронизацию даже при разных длительностях эффектов.
ScrollMagic предоставляет методы для реагирования на события прокрутки:
scene.on("enter", function () {
console.log("Параллельные анимации запущены");
});
scene.on("leave", function () {
console.log("Анимации завершены или прокручены обратно");
});
Можно комбинировать эти события с таймлайнами для создания интерактивных эффектов, например, включение или сброс анимаций при повторной прокрутке.
will-change: transform для элементов с
CSS-анимацией, чтобы браузер оптимизировал отрисовку.Scene.box-shadow)
для плавного скролла.Параллельные анимации в ScrollMagic с GSAP позволяют создавать сложные и синхронизированные эффекты, управляемые скроллом, при этом сохраняя высокую производительность и точный контроль над временем и порядком анимаций.