Фокус-менеджмент в ScrollMagic заключается в управлении событиями и анимациями на основе позиции прокрутки страницы. Основным элементом является сцена (Scene), которая определяет область действия и поведение элементов при скролле.
var controller = new ScrollMagic.Controller();
var scene = new ScrollMagic.Scene({
triggerElement: "#trigger", // элемент, при достижении которого активируется сцена
duration: 300, // длина действия сцены в пикселях
offset: 50 // смещение относительно триггера
})
.setPin("#animate") // фиксирует элемент на время сцены
.addTo(controller);
Ключевые параметры Scene:
triggerElement — элемент, при появлении которого на
экране запускается сцена. Может быть CSS-селектором или DOM-узлом.duration — продолжительность действия сцены. Если не
задана, событие срабатывает мгновенно.offset — смещение триггера по оси Y.reverse — булево значение, определяет, будет ли сцена
срабатывать при прокрутке обратно. По умолчанию true.ScrollMagic предоставляет систему событий, которые позволяют точно контролировать поведение элементов:
enter — событие срабатывает, когда прокрутка достигает
триггера.leave — срабатывает, когда сцена покидается.start и end — более точное отслеживание
момента начала и окончания сцены.progress — событие прогресса сцены, полезно для
синхронизации анимаций.Пример привязки событий к сцене:
scene.on("enter", function (event) {
console.log("Сцена активирована");
});
scene.on("leave", function (event) {
console.log("Сцена покинута");
});
scene.on("progress", function (event) {
console.log("Прогресс сцены: " + event.progress);
});
Метод .setPin() позволяет закрепить элемент на время
действия сцены. Это особенно важно для фокус-менеджмента, когда нужно
удерживать внимание пользователя на определенном контенте:
scene.setPin("#fixed-element", {pushFollowers: false});
pushFollowers — контролирует, будут ли смещаться
последующие элементы. Если false, остальные блоки остаются
на месте, создавая эффект наложения.Для динамичного фокус-менеджмента часто используется сочетание ScrollMagic с GSAP или CSS-анимациями:
var tween = gsap.to("#animate", {x: 500, rotation: 360, duration: 2});
var scene = new ScrollMagic.Scene({
triggerElement: "#trigger",
duration: 400
})
.setTween(tween)
.addTo(controller);
.setTween() связывает анимацию с сценой, позволяя ей
изменяться пропорционально прокрутке.ScrollMagic позволяет создавать цепочки сцен, обеспечивая плавный переход внимания пользователя между элементами:
var scenes = [];
var triggers = document.querySelectorAll(".section");
triggers.forEach(function(trigger, index) {
var scene = new ScrollMagic.Scene({
triggerElement: trigger,
duration: 300
})
.setClassToggle(trigger, "active") // добавление класса для фокуса
.addTo(controller);
scenes.push(scene);
});
.setClassToggle() — автоматически добавляет или убирает
класс, визуально выделяя текущий элемент.ScrollMagic поддерживает динамическое изменение параметров сцен в зависимости от размера экрана или состояния DOM:
function updateScene(scene) {
if(window.innerWidth < 768){
scene.duration(200);
} else {
scene.duration(400);
}
}
window.addEventListener("resize", function() {
scenes.forEach(updateScene);
});
В больших проектах можно создавать множественные контроллеры для разных секций страницы:
var headerController = new ScrollMagic.Controller();
var contentController = new ScrollMagic.Controller({vertical: false});
.setPin() экономно, так как слишком много
фиксированных элементов могут замедлить рендеринг.enter и leave идеально подходят
для подгрузки данных или запуска тяжелых анимаций..setTween().scene.progress()
позволяет синхронизировать несколько анимаций одновременно.Фокус-менеджмент в ScrollMagic строится на грамотной комбинации сцен, событий и анимаций, что позволяет точно направлять внимание пользователя по мере прокрутки страницы и создавать интерактивные, живые интерфейсы.