Библиотека ScrollMagic позволяет управлять поведением элементов на странице в зависимости от прокрутки. Одним из ключевых применений является организация навигации между разделами, где скролл активирует анимации, подсветку меню или прокрутку к нужным блокам.
Каждый раздел страницы может быть представлен как отдельная
сцена (Scene). Сцена создаётся с помощью
конструктора:
var controller = new ScrollMagic.Controller();
var scene = new ScrollMagic.Scene({
triggerElement: "#section1", // элемент, от которого начинается сцена
duration: "100%", // длина сцены (может быть в px или %)
triggerHook: 0.5 // точка триггера: 0 - верх, 1 - низ, 0.5 - середина
})
.setClassToggle("#menu-item1", "active") // добавление класса к меню при достижении сцены
.addTo(controller);
"100%" сцена длится до конца видимой области.Использование setClassToggle позволяет
подсвечивать пункт меню при скролле к соответствующему разделу, создавая
эффект «активного» раздела.
ScrollMagic интегрируется с библиотеками анимации, например, GSAP (GreenSock), для создания плавного движения элементов. Пример анимации текста при появлении раздела:
var tween = gsap.from("#section1 h2", {y: 50, opacity: 0, duration: 1});
var scene = new ScrollMagic.Scene({
triggerElement: "#section1",
triggerHook: 0.8,
reverse: false
})
.setTween(tween)
.addTo(controller);
Для реализации навигации по клику на пункты меню можно использовать
метод scrollTo контроллера ScrollMagic.
Пример:
controller.scrollTo(function(target) {
gsap.to(window, {duration: 1, scrollTo: target});
});
document.querySelectorAll("nav a").forEach(anchor => {
anchor.addEventListener("click", function(e) {
e.preventDefault();
var targetId = this.getAttribute("href");
controller.scrollTo(targetId);
});
});
Особенности работы:
id.Для создания навигации с фиксированным меню или элементами параллакса используются сцены с методами:
.setPin("#menu") // фиксирует меню на время сцены
Пример фиксации меню:
var scene = new ScrollMagic.Scene({
triggerElement: "#section1",
duration: "300%"
})
.setPin("#menu")
.addTo(controller);
ScrollMagic предоставляет события сцены, которые позволяют реагировать на скролл динамически:
scene.on("enter", function(event) {
console.log("Раздел достигнут:", event.target.triggerElement());
});
scene.on("leave", function(event) {
console.log("Раздел покинут:", event.target.triggerElement());
});
Это используется для:
Для комплексной навигации часто создают несколько сцен, которые взаимодействуют друг с другом:
var sections = document.querySelectorAll("section");
sections.forEach((section, index) => {
new ScrollMagic.Scene({
triggerElement: section,
triggerHook: 0.5
})
.setClassToggle(`#menu-item${index+1}`, "active")
.addTo(controller);
});
Такое решение позволяет автоматически подсвечивать меню, независимо от количества разделов, без дублирования кода.
Эта структура сцен и контроллеров обеспечивает точный контроль над прокруткой и навигацией, позволяя создавать страницы с плавной анимацией, интерактивными меню и современными эффектами параллакса.