Контроллер (ScrollMagic.Controller) является ядром
библиотеки, отвечающим за управление всеми сценами на странице. Он
отслеживает скролл пользователя, синхронизирует анимации и сцены, а
также обеспечивает корректную работу событий. Контроллер создаётся
единожды для страницы, и к нему можно подключать множество сцен.
var controller = new ScrollMagic.Controller();
Параметры при создании контроллера:
window).true по умолчанию для вертикального скролла).Пример с кастомным контейнером и глобальными опциями:
var controller = new ScrollMagic.Controller({
container: "#scrollContainer",
vertical: true,
globalSceneOptions: {triggerHook: 0.5},
loglevel: 3
});
addScene(scene | scenes) Добавляет сцену или массив сцен в контроллер для отслеживания.
controller.addScene(myScene);
controller.addScene([scene1, scene2]);
removeScene(scene | scenes) Удаляет сцену или массив сцен из контроллера.
controller.removeScene(myScene);
update(force) Принудительно обновляет все сцены, позволяя синхронизировать анимации при изменении DOM.
controller.update(true);
scrollTo(position | element | selector) Позволяет программно прокручивать страницу до указанной позиции, элемента или селектора.
controller.scrollTo("#targetElement");
controller.scrollTo(500); // до 500px
Для использования кастомной анимации вместе с scrollTo
необходимо задать обработчик:
controller.scrollTo(function(newPosition) {
TweenMax.to(window, 1, {scrollTo: {y: newPosition}});
});
enabled([bool]) Включает или отключает работу
контроллера. Если передан false, все сцены перестанут
отслеживаться.
controller.enabled(false); // отключить
controller.enabled(true); // включить
destroy([resetScenes]) Удаляет контроллер и, при необходимости, сбрасывает сцены к исходному состоянию.
controller.destroy(true);
Использование globalSceneOptions позволяет задать
одинаковые свойства для всех подключаемых сцен. Это упрощает код при
наличии большого количества однотипных сцен.
var controller = new ScrollMagic.Controller({
globalSceneOptions: {
duration: 200,
triggerHook: 0.8
}
});
При этом отдельные сцены могут переопределять эти значения:
var scene = new ScrollMagic.Scene({
triggerElement: "#section1",
duration: 400 // переопределяет глобальный duration
}).addTo(controller);
Контроллер поддерживает несколько ключевых событий:
Пример подписки на события:
controller.on("update", function(e) {
console.log("Scroll position:", e.scrollPos);
});
controller.on("change", function(e) {
console.log("Property changed:", e);
});
Контроллер позволяет эффективно управлять большим количеством сцен. Важные моменты:
var scene1 = new ScrollMagic.Scene({triggerElement: "#sec1"}).addTo(controller);
var scene2 = new ScrollMagic.Scene({triggerElement: "#sec2"}).addTo(controller);
controller.removeScene(scene1); // удаление сцены без разрушения контроллера
Контроллер позволяет отслеживать скролл не только окна браузера, но и
внутренних элементов с прокруткой. Для этого задаётся параметр
container.
var controller = new ScrollMagic.Controller({
container: "#scrollableDiv"
});
Внутренний скролл отслеживается автоматически, а сцены ведут себя так
же, как если бы скролл происходил в window.
globalSceneOptions для повторяющихся
параметров — это уменьшает дублирование кода.controller.update(true) для корректного пересчёта позиций
сцен.scrollTo интегрировать с
анимационными библиотеками типа GSAP или
Anime.js.Контроллер является ключевым элементом ScrollMagic, объединяя сцены, события и управление скроллом в единую, легко управляемую систему.