ScrollMagic предоставляет мощный инструмент для отслеживания скролла
страницы и привязки к нему анимаций и событий. Ключевой концепт — это
сцена (Scene), которая реагирует на
положение скролла относительно определённого элемента или точки на
странице. Отслеживание направления скролла позволяет создавать
интерактивные эффекты, которые меняются в зависимости от того, движется
ли пользователь вверх или вниз.
ScrollMagic автоматически предоставляет информацию о направлении скролла через свойство сцены:
scene.on("update", function(event) {
if (event.scrollDirection === "FORWARD") {
console.log("Скролл вниз");
} else if (event.scrollDirection === "REVERSE") {
console.log("Скролл вверх");
}
});
Пояснение:
FORWARD — пользователь скроллит вниз.REVERSE — пользователь скроллит вверх.update вызывается каждый раз при изменении
положения скролла, что позволяет непрерывно отслеживать направление
движения.Сцена создаётся с помощью конструктора
ScrollMagic.Scene(), в котором можно задать
триггерный элемент и длительность сцролла
(duration):
var scene = new ScrollMagic.Scene({
triggerElement: "#section1",
duration: 200 // длина эффекта в пикселях
})
.addTo(controller);
Ключевые моменты:
triggerElement — элемент, при достижении которого сцена
активируется.duration — область действия сцены; если указано 0,
событие срабатывает мгновенно при пересечении триггера.addTo(controller) — добавление сцены в контроллер
ScrollMagic, который управляет всеми сценами на странице.Можно динамически менять класс элемента или запускать анимацию при скролле вверх или вниз:
scene.on("update", function(event) {
var box = document.querySelector("#box");
if (event.scrollDirection === "FORWARD") {
box.classList.add("scroll-down");
box.classList.remove("scroll-up");
} else if (event.scrollDirection === "REVERSE") {
box.classList.add("scroll-up");
box.classList.remove("scroll-down");
}
});
Рекомендации по использованию:
update, так
как оно вызывается при каждом пикселе скролла.enter и leaveКроме update, сцена поддерживает события
enter и leave, которые срабатывают при входе
или выходе элемента из области сцролла:
scene.on("enter leave", function(event) {
if (event.type === "enter") {
console.log("Элемент вошёл в видимую область");
} else if (event.type === "leave") {
console.log("Элемент покинул видимую область");
}
});
Эти события удобно сочетать с направлением скролла:
scene.on("enter", function(event) {
if (event.scrollDirection === "FORWARD") {
// Запустить анимацию появления при скролле вниз
}
});
scene.on("leave", function(event) {
if (event.scrollDirection === "REVERSE") {
// Запустить анимацию возврата при скролле вверх
}
});
ScrollMagic идеально интегрируется с библиотекой GSAP. Направление скролла можно использовать для управления прогрессом анимации:
var tween = gsap.to("#box", { x: 400, duration: 1 });
var scene = new ScrollMagic.Scene({
triggerElement: "#section1",
duration: 500
})
.setTween(tween)
.addTo(controller);
scene.on("update", function(event) {
if (event.scrollDirection === "FORWARD") {
tween.progress(1); // скролл вниз — завершить анимацию
} else if (event.scrollDirection === "REVERSE") {
tween.progress(0); // скролл вверх — вернуть в исходное состояние
}
});
Преимущества:
Можно создавать отдельные сцены для отслеживания скролла вверх и вниз, что упрощает управление сложными эффектами:
var sceneDown = new ScrollMagic.Scene({ triggerElement: "#section2" })
.on("enter", function(){ console.log("Скролл вниз активен"); })
.addTo(controller);
var sceneUp = new ScrollMagic.Scene({ triggerElement: "#section2" })
.on("leave", function(){ console.log("Скролл вверх активен"); })
.addTo(controller);
Советы по организации:
update только для обновления
состояния элементов или классов; сложные вычисления лучше выполнять
заранее.enter и leave с
scrollDirection для точного контроля над визуальными
эффектами.