ScrollMagic — это JavaScript-библиотека для управления анимациями и событиями при прокрутке страницы. Она позволяет привязывать действия к положению скролла, создавать «эффект параллакса», а также синхронизировать анимации с прокруткой. В основе работы лежит идея сцен (scenes) и контроллеров (controllers).
Контроллер (Controller) — объект, который управляет сценами. Он отслеживает прокрутку страницы и обновляет все сцены, которые к нему привязаны. Контроллер может быть связан с конкретным контейнером, что позволяет создавать сложные прокрутки внутри блоков.
Сцена (Scene) — логическая единица, определяющая, когда и как выполняется анимация. Сцена может иметь:
Создание контроллера — первый шаг при работе с ScrollMagic:
var controller = new ScrollMagic.Controller();
Контроллер может принимать параметры, например:
var controller = new ScrollMagic.Controller({
globalSceneOptions: { triggerHook: 0.5 } // общие настройки для всех сцен
});
Это упрощает настройку, если несколько сцен имеют одинаковые свойства.
Сцена создается через new ScrollMagic.Scene({ ... }).
Пример базовой сцены:
var scene = new ScrollMagic.Scene({
triggerElement: "#section1",
duration: 300,
triggerHook: 0.75
})
.setClassToggle("#animateElement", "visible") // добавляет класс при срабатывании
.addTo(controller); // привязывает сцену к контроллеру
0.5 — середина окна.ScrollMagic часто используется вместе с GSAP (TweenMax / TweenLite) для плавных анимаций:
var tween = TweenMax.to("#box", 1, { x: 200, rotation: 360 });
var scene = new ScrollMagic.Scene({
triggerElement: "#section2",
duration: 500
})
.setTween(tween)
.addTo(controller);
setTween привязывает анимацию к сцене.duration, тем медленнее проходит анимация по мере
прокрутки.var scene = new ScrollMagic.Scene({
triggerElement: "#section3",
duration: 400
})
.setPin("#stickyElement")
.addTo(controller);
scene.addIndicators({ name: "Scene 1" });
scene.on("enter", function (event) {
console.log("Сцена активирована");
});
scene.on("leave", function (event) {
console.log("Сцена завершена");
});
Доступные события: enter, leave,
start, end, update.
Можно создавать несколько сцен, которые реагируют на прокрутку в одной секции:
var scene1 = new ScrollMagic.Scene({ triggerElement: "#section1", duration: 200 })
.setClassToggle("#elem1", "visible")
.addTo(controller);
var scene2 = new ScrollMagic.Scene({ triggerElement: "#section1", duration: 200, offset: 100 })
.setClassToggle("#elem2", "visible")
.addTo(controller);
offset позволяет сдвигать запуск сцен относительно
triggerElement.
С помощью ScrollMagic можно создавать эффект параллакса, где элементы двигаются с разной скоростью:
var tween = TweenMax.to("#bg", 1, { y: "-50%", ease: Linear.easeNone });
var scene = new ScrollMagic.Scene({
triggerElement: "#parallaxSection",
duration: "100%"
})
.setTween(tween)
.addTo(controller);
Длительность "100%" означает, что анимация будет длиться
столько, сколько высота экрана, что позволяет точно синхронизировать
движение с прокруткой.
ScrollMagic учитывает высоту окна и может работать с сенсорной прокруткой, однако при необходимости оптимизации:
controller.refresh() после динамических
изменений контента;ScrollMagic обеспечивает гибкий контроль над событиями при прокрутке, объединяя управление классами, фиксацию элементов и анимацию в единую систему. Возможность комбинировать сцены и контроллеры позволяет создавать сложные интерфейсы с динамическим и интерактивным контентом, которые реагируют на движение пользователя.