ScrollMagic — это библиотека для управления анимациями и взаимодействиями на странице с прокруткой. Она позволяет создавать скролл-зависимые анимации, управлять элементами DOM и синхронизировать события с положением скролла. Основными строительными блоками библиотеки являются Controller, Scene и методы управления анимацией.
var controller = new ScrollMagic.Controller();
var scene = new ScrollMagic.Scene({
triggerElement: "#trigger", // элемент, который запускает сцену
duration: 300, // длина сцены в пикселях
offset: 50 // смещение от триггера
});
scene
.setTween("#animate", {opacity: 0, y: -50}) // подключение анимации TweenMax
.addTo(controller); // добавление сцены в контроллер
TriggerElement определяет точку на странице, с которой начинается анимация. Она может быть любым DOM-элементом. Offset позволяет смещать начало сцены относительно триггера, а duration задаёт продолжительность действия сцены.
Пример плавного появления элемента при скролле:
var tween = gsap.to("#box", {duration: 1, x: 400, opacity: 1});
var scene = new ScrollMagic.Scene({
triggerElement: "#start",
duration: 500
})
.setTween(tween)
.addTo(controller);
В этом примере элемент с id="box" будет постепенно
перемещаться вправо и становиться видимым в течение 500 пикселей
скролла.
ScrollMagic позволяет добавлять или удалять CSS-классы при достижении определённого положения скролла:
var scene = new ScrollMagic.Scene({triggerElement: "#trigger"})
.setClassToggle("#element", "visible") // добавляет класс 'visible'
.addTo(controller);
Также доступны события, на которые можно подписываться:
scene.on("enter", function() {
console.log("Элемент появился на экране");
});
scene.on("leave", function() {
console.log("Элемент покинул экран");
});
События enter и leave срабатывают при
пересечении триггерной точки.
Параллакс-эффекты создаются через Tween-анимации, привязанные к прокрутке. Ключевой момент — синхронизация движения с положением скролла:
var tween = gsap.to("#background", {y: "50%", ease: "none"});
var scene = new ScrollMagic.Scene({
triggerElement: "#section",
duration: "100%"
})
.setTween(tween)
.addTo(controller);
Использование ease: "none" гарантирует линейное движение
элемента при скролле, что создаёт эффект параллакса без ускорений и
замедлений.
Для сложных интерактивных страниц удобно создавать несколько сцен, которые управляются одним контроллером. Каждая сцена может отвечать за отдельный эффект, а общая структура страницы остаётся логичной и управляемой:
var scene1 = new ScrollMagic.Scene({triggerElement: "#section1"})
.setClassToggle("#image1", "active")
.addTo(controller);
var scene2 = new ScrollMagic.Scene({triggerElement: "#section2"})
.setTween("#image2", {scale: 1.2})
.addTo(controller);
ScrollMagic тесно интегрируется с GSAP (GreenSock Animation Platform), позволяя создавать сложные анимации с таймлайнами и контролем скорости:
var tl = gsap.timeline();
tl.to("#box", {x: 100, duration: 1})
.to("#box", {y: 200, duration: 1});
var scene = new ScrollMagic.Scene({
triggerElement: "#trigger",
duration: 400
})
.setTween(tl)
.addTo(controller);
Это позволяет создавать каскадные анимации, где несколько свойств меняются последовательно в зависимости от скролла.
setClassToggle вместо анимации.ScrollMagic поддерживает фиксирование элементов на определённый
период прокрутки с помощью метода setPin:
var scene = new ScrollMagic.Scene({
triggerElement: "#pin-section",
duration: 300
})
.setPin("#pinned-element")
.addTo(controller);
Элемент с id="pinned-element" будет оставаться
зафиксированным на экране на протяжении 300 пикселей скролла. Это удобно
для блоков с интерактивными иллюстрациями, слайдеров
или параллаксных фонов.
Для корректной работы на мобильных устройствах следует учитывать:
window.innerHeight), чтобы
корректно рассчитывать триггерные точки.duration в процентах, чтобы сцены
масштабировались под разную высоту экрана.ScrollMagic обеспечивает гибкость при создании интерактивных иллюстраций, а правильная комбинация сцен, триггеров, анимаций и pinning позволяет реализовать динамичные визуальные эффекты с высокой степенью контроля над поведением элементов на странице.