ScrollMagic позволяет управлять состоянием элементов на странице в зависимости от прокрутки. Одним из наиболее мощных инструментов библиотеки является переключение CSS-классов, которое позволяет добавлять и убирать классы в момент достижения определённой точки прокрутки. Это особенно полезно для анимаций, изменения стилей или динамического отображения контента.
Для начала создаётся экземпляр контроллера:
var controller = new ScrollMagic.Controller();
Контроллер отвечает за управление всеми сценами на странице.
Основной строительный блок — ScrollMagic.Scene. Он определяет, когда и где должно произойти добавление или удаление класса.
var scene = new ScrollMagic.Scene({
triggerElement: "#trigger", // элемент, который вызывает действие
triggerHook: 0.5, // позиция триггера на экране (0 — верх, 1 — низ)
duration: 200 // длина действия сцены в пикселях
})
.setClassToggle("#animate", "active") // элемент и класс для переключения
.addTo(controller); // добавление сцены в контроллер
Пояснение параметров:
Длительность сцены играет ключевую роль при управлении классами. Если duration = 0, класс добавляется и удаляется мгновенно при пересечении триггера. Если значение положительное, класс остаётся активным, пока пользователь прокручивает указанный диапазон.
var scene = new ScrollMagic.Scene({
triggerElement: "#section1",
duration: 300
})
.setClassToggle("#box", "highlight")
.addTo(controller);
В этом примере класс highlight будет оставаться
активным, пока пользователь прокручивает 300 пикселей после достижения
элемента #section1.
ScrollMagic поддерживает одновременное использование нескольких сцен для разных элементов или даже одного элемента с разными классами. Это позволяет создавать сложные интерактивные эффекты.
var scene1 = new ScrollMagic.Scene({
triggerElement: "#sectionA"
})
.setClassToggle("#boxA", "visible")
.addTo(controller);
var scene2 = new ScrollMagic.Scene({
triggerElement: "#sectionB"
})
.setClassToggle("#boxB", "visible")
.addTo(controller);
Каждая сцена работает независимо и реагирует на свои триггеры.
С помощью событий сцены можно более гибко управлять классами,
используя слушатели событий enter, leave и
progress.
var scene = new ScrollMagic.Scene({
triggerElement: "#trigger"
})
.on("enter", function () {
document.querySelector("#animate").classList.add("entered");
})
.on("leave", function () {
document.querySelector("#animate").classList.remove("entered");
})
.addTo(controller);
Чаще всего переключение классов используется совместно с CSS-анимациями. Это позволяет создавать плавные эффекты без сложного JavaScript.
#animate {
opacity: 0;
transform: translateY(50px);
transition: all 0.5s ease-out;
}
#animate.active {
opacity: 1;
transform: translateY(0);
}
В этом примере класс active, добавленный сценой
ScrollMagic, запускает анимацию появления элемента.
setClassToggle с
событиями progress для более точного контроля.new ScrollMagic.Scene({
triggerElement: "#sectionColor",
duration: 500
})
.on("progress", function(e) {
document.body.style.backgroundColor = `rgba(255, 0, 0, ${e.progress})`;
})
.addTo(controller);
var scene = new ScrollMagic.Scene({ triggerElement: "#trigger" })
.setClassToggle("#multi", "step1 step2")
.addTo(controller);
Использование ScrollMagic для переключения классов открывает возможности создавать динамичные страницы с интерактивными эффектами, управляемыми исключительно через прокрутку, минимизируя необходимость сложной логики в JavaScript.