В контексте ScrollMagic под «фокусом» понимается управление вниманием
пользователя через изменение состояния элементов в зависимости от
положения скролла. Это достигается с помощью сцен (Scene),
контроллера (Controller) и привязки к триггерам. Грамотное
управление фокусом позволяет:
ScrollMagic строится вокруг объекта Controller, который
отслеживает прокрутку и обновляет связанные сцены.
const controller = new ScrollMagic.Controller();
Контроллер может быть настроен:
container — элемент с прокруткой (по умолчанию
window);globalSceneOptions — общие настройки для всех
сцен;loglevel — уровень логирования (0–3).Пример:
const controller = new ScrollMagic.Controller({
globalSceneOptions: {
triggerHook: 0.5
}
});
Это задаёт центральную точку экрана как базовый ориентир для всех сцен.
Ключевым элементом является triggerElement —
DOM-элемент, при достижении которого сцена активируется.
const scene = new ScrollMagic.Scene({
triggerElement: '#section1',
triggerHook: 0.5,
duration: 300
})
.addTo(controller);
Параметры:
Фокус формируется внутри диапазона duration. Пока
пользователь находится в этом диапазоне, сцена считается активной.
Каждая сцена имеет три состояния:
Отслеживание состояния:
scene.on('enter', () => {
console.log('Вошли в сцену');
});
scene.on('leave', () => {
console.log('Покинули сцену');
});
Использование этих событий позволяет управлять фокусом — например, менять классы элементов.
Классический пример управления фокусом — подсветка текущего блока страницы.
document.querySelectorAll('.section').forEach(section => {
new ScrollMagic.Scene({
triggerElement: section,
triggerHook: 0.5,
duration: section.offsetHeight
})
.setClassToggle(section, 'active')
.addTo(controller);
});
Здесь:
active;Управление фокусом часто используется для синхронизации с меню.
document.querySelectorAll('.section').forEach((section, index) => {
const navItem = document.querySelectorAll('.nav-item')[index];
new ScrollMagic.Scene({
triggerElement: section,
triggerHook: 0.3,
duration: section.offsetHeight
})
.on('enter', () => navItem.classList.add('active'))
.on('leave', () => navItem.classList.remove('active'))
.addTo(controller);
});
Особенности:
triggerHook: 0.3 смещает точку активации выше
центра;Закрепление — один из способов усилить фокус на элементе.
new ScrollMagic.Scene({
triggerElement: '#pin-block',
duration: 500
})
.setPin('#pin-block')
.addTo(controller);
Поведение:
duration.Это создаёт эффект концентрации внимания на контенте.
Фокус можно управлять не только бинарно (активен/неактивен), но и плавно, через прогресс сцены.
scene.on('progress', event => {
const progress = event.progress;
document.querySelector('#box').style.opacity = progress;
});
progress изменяется от 0 до 1, что позволяет:
Для сложных интерфейсов используется несколько сцен, работающих одновременно.
const scenes = [];
document.querySelectorAll('.step').forEach(step => {
const scene = new ScrollMagic.Scene({
triggerElement: step,
triggerHook: 0.5,
duration: 200
})
.setClassToggle(step, 'focused')
.addTo(controller);
scenes.push(scene);
});
Подход:
Если прокрутка происходит внутри контейнера:
const container = document.querySelector('.scroll-container');
const controller = new ScrollMagic.Controller({
container: container
});
Важно:
triggerElement должны находиться внутри
контейнера;Управление фокусом может быть ресурсоёмким при большом количестве сцен. Рекомендации:
reverse: false, если не требуется обратное
проигрывание:new ScrollMagic.Scene({
triggerElement: '#block',
reverse: false
});
Для контроля зон фокуса используется плагин
debug.addIndicators.
scene.addIndicators({
name: 'Focus Zone',
colorStart: 'green',
colorEnd: 'red'
});
Отображает:
Это позволяет точно настраивать поведение фокуса.
ScrollMagic часто используется вместе с GSAP для более гибкого управления анимациями.
const tween = gsap.to('#box', {
scale: 1.5,
duration: 1
});
new ScrollMagic.Scene({
triggerElement: '#box',
duration: 300
})
.setTween(tween)
.addTo(controller);
В этом случае:
При изменении DOM необходимо обновлять сцены:
controller.update(true);
Или:
scene.refresh();
Это важно при:
Для сложных страниц управление фокусом строится как композиция:
Такая архитектура позволяет: