Контроллер в ScrollMagic является центральным элементом управления анимациями на основе скролла. Он отвечает за отслеживание положения страницы, обработку событий скроллинга и синхронизацию сцен (scenes) с прокруткой. Без контроллера невозможно корректно управлять последовательностью и триггерами анимаций.
Для создания контроллера используется конструктор
ScrollMagic.Controller. Базовый пример:
var controller = new ScrollMagic.Controller();
Контроллер может принимать объект с параметрами конфигурации:
var controller = new ScrollMagic.Controller({
vertical: true, // отслеживание вертикального скролла (по умолчанию true)
globalSceneOptions: { // общие параметры для всех сцен
triggerHook: 0.5
},
refreshInterval: 100 // интервал обновления контроллера в миллисекундах
});
Ключевые параметры:
vertical – определяет направление скролла. Если false,
контроллер работает для горизонтального скролла.globalSceneOptions – позволяет задать параметры,
которые будут применены ко всем сценам, создаваемым через этот
контроллер.refreshInterval – задаёт частоту обновления внутренних
вычислений положения сцен и триггеров.Контроллер управляет сценами, которые привязаны к конкретным элементам на странице. Каждая сцена регистрируется в контроллере при создании:
var scene = new ScrollMagic.Scene({
triggerElement: "#trigger", // элемент, при достижении которого начинается анимация
duration: 200, // длина сцены в пикселях прокрутки
offset: 50 // смещение старта сцены относительно triggerElement
})
.setClassToggle("#animate", "visible") // добавление класса при активации сцены
.addTo(controller); // регистрация сцены в контроллере
Контроллер автоматически отслеживает положение прокрутки и обновляет
состояния всех сцен, добавленных через метод
.addTo(controller).
Контроллер позволяет вручную обновлять положение сцен и пересчитывать триггеры:
controller.update(true); // форсированное обновление всех сцен
Это полезно при динамическом изменении DOM, когда размеры элементов или позиция триггеров могут изменяться после загрузки страницы.
Один контроллер может управлять любым количеством сцен одновременно:
var scene1 = new ScrollMagic.Scene({ triggerElement: "#section1" })
.setClassToggle("#section1Content", "active")
.addTo(controller);
var scene2 = new ScrollMagic.Scene({ triggerElement: "#section2" })
.setTween(TweenMax.to("#section2Content", 1, {opacity: 1}))
.addTo(controller);
Контроллер обеспечивает синхронизацию всех сцен относительно одного источника скролла. При прокрутке страницы ScrollMagic автоматически определяет, какие сцены активны и какие действия необходимо выполнить.
addScene(scene) – добавление отдельной сцены в
контроллер.removeScene(scene) – удаление сцены из контроля.updateScene(scene, immediately) – обновление состояния
конкретной сцены.scrollTo(position) – программное перемещение скролла к
указанной позиции.destroy(deleteScenes) – уничтожение контроллера; если
deleteScenes равен true, все сцены также удаляются.Контроллер генерирует собственные события, позволяя отслеживать прокрутку и обновление сцен:
change – вызывается при изменении позиции скролла.update – при обновлении всех сцен.scroll – при движении скролла.resize – при изменении размеров окна браузера.Пример использования событий:
controller.on("update", function (e) {
console.log("Текущее положение скролла:", e.scrollPos);
});
Контроллер выполняет оптимизацию производительности, предотвращая лишние вычисления при быстром скролле. Он управляет внутренними таймерами и кэширует позиции сцен, что позволяет плавно синхронизировать анимации даже при динамическом изменении DOM.
Контроллер — это связующее звено между скроллом и сценами. Он:
Контроллер является обязательным элементом любой архитектуры ScrollMagic, обеспечивая стабильную и предсказуемую работу сцен и их анимаций.