ScrollMagic позволяет управлять поведением элементов на странице в зависимости от прокрутки. При неправильном применении это приводит к перегруженности интерфейса, ухудшению читаемости и потере контроля у пользователя. Основная задача — использовать скролл-анимации как инструмент улучшения восприятия, а не как декоративный элемент.
Ключевые принципы:
Используется для поэтапного показа информации по мере прокрутки. Это снижает когнитивную нагрузку и помогает структурировать длинные страницы.
Реализация:
const controller = new ScrollMagic.Controller();
document.querySelectorAll('.section').forEach(section => {
new ScrollMagic.Scene({
triggerElement: section,
triggerHook: 0.8,
reverse: false
})
.setClassToggle(section, 'visible')
.addTo(controller);
});
UX-аспекты:
Позволяет «закрепить» элемент на экране при прокрутке. Часто применяется для storytelling или акцентирования внимания.
Реализация:
new ScrollMagic.Scene({
triggerElement: '#pin-section',
duration: 500
})
.setPin('#pin-section')
.addTo(controller);
UX-аспекты:
Антипаттерн: чрезмерное использование pin-секций создает ощущение «сломанного» скролла.
Создает иллюзию глубины за счет разной скорости движения элементов.
Реализация:
new ScrollMagic.Scene({
triggerElement: '.parallax',
duration: '100%'
})
.setTween('.background', { y: '50%', ease: Linear.easeNone })
.addTo(controller);
UX-аспекты:
Позволяет привязать прогресс анимации к позиции скролла.
Реализация:
const tween = TweenMax.to('.box', 1, {
x: 300
});
new ScrollMagic.Scene({
triggerElement: '.box',
duration: 300
})
.setTween(tween)
.addTo(controller);
UX-аспекты:
Используются для отображения текущего положения пользователя на странице.
Реализация:
new ScrollMagic.Scene({
triggerElement: 'body',
duration: document.body.scrollHeight
})
.on('progress', function (event) {
document.querySelector('.progress-bar').style.width =
(event.progress * 100) + '%';
})
.addTo(controller);
UX-аспекты:
Анимации запускаются только при попадании элемента в область видимости.
Реализация:
new ScrollMagic.Scene({
triggerElement: '.item',
triggerHook: 0.9,
reverse: false
})
.setClassToggle('.item', 'animate')
.addTo(controller);
UX-аспекты:
ScrollMagic позволяет направлять внимание через:
Рекомендации:
Особенности:
Практики:
if (window.innerWidth > 768) {
// сложные анимации
} else {
// упрощённый вариант
}
1. Избыточная анимация
2. Нарушение естественного скролла
3. Несогласованность
4. Игнорирование производительности
Организация кода влияет на UX:
const scenes = [];
function createScene(trigger, duration) {
const scene = new ScrollMagic.Scene({
triggerElement: trigger,
duration: duration
}).addTo(controller);
scenes.push(scene);
}
Преимущества:
ScrollMagic раскрывает потенциал при комбинировании:
Важно соблюдать баланс и не перегружать интерфейс.
Анимации должны подчиняться ритму прокрутки:
Практическое правило:
ScrollMagic может создавать барьеры:
Решения:
@media (prefers-reduced-motion: reduce) {
.animate {
animation: none;
transition: none;
}
}
Проверка включает:
Метрики:
Структура:
ScrollMagic позволяет управлять каждым этапом через сцены и триггеры, создавая последовательный и контролируемый пользовательский опыт.