В библиотеке ScrollMagic основным элементом управления анимацией при скролле является Controller. Контроллеры создают контекст, в котором происходят сцены, и определяют поведение анимаций относительно прокрутки страницы. Существует два подхода к использованию контроллеров: глобальный и локальный.
Глобальный контроллер — это единый объект
ScrollMagic.Controller, который управляет всеми сценами на
странице. Он создаётся один раз и используется повсеместно.
var controller = new ScrollMagic.Controller();
var scene1 = new ScrollMagic.Scene({
triggerElement: "#section1",
duration: 300
})
.setTween("#animate1", {opacity: 1, y: 0})
.addTo(controller);
var scene2 = new ScrollMagic.Scene({
triggerElement: "#section2",
duration: 400
})
.setTween("#animate2", {scale: 1.2})
.addTo(controller);
Все сцены привязаны к одному контроллеру. Если требуется обновление или перезагрузка анимаций, достаточно работать с глобальным контроллером:
controller.update(true);
Локальный контроллер создаётся для конкретного контейнера или отдельного блока на странице. Это позволяет ограничить область действия анимации и изолировать сцены друг от друга.
var localController = new ScrollMagic.Controller({
container: "#scroll-container"
});
var localScene = new ScrollMagic.Scene({
triggerElement: ".local-trigger",
duration: 200
})
.setTween(".local-animate", {x: 100})
.addTo(localController);
В этом случае анимация реагирует только на прокрутку внутри
#scroll-container, а не всей страницы.
vertical — направление скролла (true по
умолчанию для вертикального).container — DOM-элемент, за которым контроллер будет
следить.globalSceneOptions — объект с параметрами по умолчанию
для всех сцен, добавленных к контроллеру.var controller = new ScrollMagic.Controller({
vertical: true,
container: "#scroll-container",
globalSceneOptions: {triggerHook: 0.5}
});
.addTo(controller) — привязка сцены к конкретному
контроллеру..removeScene(scene) — удаление сцены из
контроллера.controller.update(force) — принудительное обновление
всех сцен.enter,
leave, progress.В крупных интерфейсах часто применяют оба подхода одновременно:
var mainController = new ScrollMagic.Controller();
var sectionController = new ScrollMagic.Controller({container: "#section-scroll"});
var globalScene = new ScrollMagic.Scene({
triggerElement: "#global",
duration: 500
}).setTween("#global-animate", {opacity: 1}).addTo(mainController);
var localScene = new ScrollMagic.Scene({
triggerElement: ".section-trigger",
duration: 300
}).setTween(".section-animate", {y: -50}).addTo(sectionController);
Такой подход позволяет:
controller.update(true) после
динамического изменения DOM, чтобы анимации корректно
пересчитались.Использование глобальных и локальных контроллеров в ScrollMagic обеспечивает гибкость, масштабируемость и точный контроль над анимациями, делая возможным создание сложных интерактивных интерфейсов с плавной и предсказуемой прокруткой.