ScrollMagic — это библиотека JavaScript, которая позволяет связывать анимацию элементов страницы с прокруткой. Цветовая маркировка в ScrollMagic используется для визуальной отладки сцен и контроллеров, облегчая понимание того, как элементы взаимодействуют с прокруткой. Основные объекты библиотеки — Controller и Scene, и именно на сценах применяется цветовая маркировка.
Контроллер отвечает за управление всеми сценами и обеспечивает синхронизацию с прокруткой страницы. При создании контроллера можно включить визуальные индикаторы, которые будут отображать состояние сцены:
var controller = new ScrollMagic.Controller({
globalSceneOptions: {
triggerHook: 0.5
}
});
Здесь triggerHook задаёт точку срабатывания сцены
относительно окна просмотра. Значение 0.5 соответствует середине экрана.
Цветовая маркировка напрямую зависит от состояния сцены: активная сцена
может подсвечиваться одним цветом, завершённая — другим.
Сцена — это основной строительный блок ScrollMagic. Она связывает конкретный элемент DOM с анимацией и событиями прокрутки:
var scene = new ScrollMagic.Scene({
triggerElement: "#section1",
duration: 300
})
.setClassToggle("#section1", "active")
.addIndicators({name: "Section 1", colorStart: "#ff0000", colorEnd: "#00ff00"})
.addTo(controller);
Ключевые параметры addIndicators:
Индикаторы создаются только для отладки и не влияют на производительность или поведение анимации в продакшене.
Хотя addIndicators предоставляет базовые цвета, для
более сложного визуального оформления можно использовать CSS.
ScrollMagic создаёт элементы с классами
.scrollmagic-indicator, .scrollmagic-start,
.scrollmagic-end:
.scrollmagic-indicator {
opacity: 0.7;
font-size: 12px;
padding: 2px 4px;
}
.scrollmagic-start {
background-color: blue !important;
}
.scrollmagic-end {
background-color: green !important;
}
Это позволяет полностью контролировать стиль индикаторов: от формы до прозрачности и шрифтов. Такой подход полезен при работе с множеством сцен и различными цветами для каждой из них.
Цвета можно менять динамически на основе состояния сцены или других
условий. ScrollMagic предоставляет события enter,
leave и progress, которые можно использовать
для изменения стиля индикаторов в реальном времени:
scene.on("enter", function(event) {
document.querySelector(".scrollmagic-start").style.backgroundColor = "orange";
});
scene.on("leave", function(event) {
document.querySelector(".scrollmagic-start").style.backgroundColor = "red";
});
scene.on("progress", function(event) {
let progressColor = `rgb(${Math.floor(255 * event.progress)}, 0, 0)`;
document.querySelector(".scrollmagic-indicator").style.backgroundColor = progressColor;
});
Здесь используется свойство event.progress, которое
возвращает значение от 0 до 1, отражающее степень прокрутки сцены. Это
позволяет реализовать плавное изменение цвета, синхронизированное с
движением страницы.
addIndicators предназначен только для разработки. Для этого
можно использовать условные проверки на
window.location.hostname.Комбинирование TweenMax или GSAP-анимаций с цветовой маркировкой позволяет видеть синхронизацию визуальных эффектов и прокрутки. Пример:
var tween = gsap.to("#section1", {x: 200, rotation: 360, duration: 1});
var scene = new ScrollMagic.Scene({
triggerElement: "#section1",
duration: 500
})
.setTween(tween)
.addIndicators({name: "Anim Section", colorStart: "#0000ff", colorEnd: "#ff00ff"})
.addTo(controller);
Индикаторы сразу показывают, когда анимация запускается, прогрессирует и завершается, что упрощает точную настройку длительности и момента срабатывания.
При работе с несколькими сценами важно использовать разные
цвета для каждого блока, чтобы визуально разделять их. Также
полезно использовать метод .setClassToggle вместе с
индикаторами, чтобы видеть сразу изменения на элементе и на
индикаторе.
new ScrollMagic.Scene({triggerElement: "#section2", duration: 400})
.setClassToggle("#section2", "highlight")
.addIndicators({name: "Section 2", colorStart: "#ff8800", colorEnd: "#88ff00"})
.addTo(controller);
Такой подход облегчает отладку сложных страниц с длинной прокруткой и множественными анимационными эффектами.