ScrollMagic предоставляет мощный механизм управления анимациями и эффектами при прокрутке, позволяя привязывать события к конкретным элементам на странице. Основной концепт заключается в создании сцены (Scene), которая отслеживает положение элемента относительно области просмотра (viewport) и запускает соответствующие действия.
Для начала необходимо создать экземпляр контроллера:
var controller = new ScrollMagic.Controller();
Далее создаётся сцена, где ключевым параметром является
triggerElement — элемент, относительно которого будет
происходить срабатывание сцены.
var scene = new ScrollMagic.Scene({
triggerElement: "#section1", // CSS-селектор или DOM-элемент
triggerHook: 0.5, // Позиция срабатывания сцены (0 – верх, 1 – низ)
duration: 200 // Продолжительность сцены в пикселях
})
.setClassToggle("#animateMe", "active") // Добавление класса при достижении триггера
.addTo(controller);
Пояснения:
triggerElement может быть либо CSS-селектором, либо
прямым DOM-элементом.triggerHook определяет точку на экране, где произойдёт
срабатывание (например, 0.5 — центр окна).duration задаёт область действия сцены: если указано 0,
событие срабатывает единожды при достижении триггера; если больше 0 —
сцена будет активной на протяжении указанного числа пикселей.duration: 0 добавляет эффект при достижении триггера и
сразу завершает работу.new ScrollMagic.Scene({
triggerElement: "#header",
duration: 0
})
.setClassToggle("#logo", "visible")
.addTo(controller);
duration
больше нуля, сцена остаётся активной, пока прокрутка не выйдет за
пределы зоны действия.new ScrollMagic.Scene({
triggerElement: "#section2",
duration: 400
})
.setTween("#box", {scale: 1.5}) // Анимация GSAP
.addTo(controller);
.on("enter") и .on("leave") для
тонкого контроля:scene.on("enter", function () {
console.log("Элемент вошёл в зону видимости");
});
scene.on("leave", function () {
console.log("Элемент покинул зону видимости");
});
Чтобы применять эффекты к группе элементов, можно использовать цикл:
document.querySelectorAll(".animate-item").forEach(function(el) {
new ScrollMagic.Scene({
triggerElement: el,
triggerHook: 0.8
})
.setClassToggle(el, "visible")
.addTo(controller);
});
Это позволяет создавать каскадные эффекты или последовательные анимации для списка элементов при прокрутке.
triggerHook для точной привязкиtriggerHook принимает значения от 0 до 1:
0 – верх окна0.5 – середина окна1 – низ окнаПримеры:
new ScrollMagic.Scene({
triggerElement: "#feature",
triggerHook: 0.2
})
.setClassToggle("#featureBox", "highlight")
.addTo(controller);
Такой подход позволяет синхронизировать анимацию с точной позицией элемента в viewport.
ScrollMagic отлично интегрируется с библиотекой GSAP для создания сложных анимаций:
var tween = gsap.to("#panel", {x: 300, rotation: 360, duration: 1});
new ScrollMagic.Scene({
triggerElement: "#triggerPanel",
duration: 500
})
.setTween(tween)
.addTo(controller);
В этом случае элемент будет плавно анимироваться при прокрутке на протяжении 500 пикселей, а управление сцены будет полностью синхронизировано с положением триггерного элемента.
setPinПривязка к элементу может быть использована для создания «липких» блоков:
new ScrollMagic.Scene({
triggerElement: "#stickySection",
triggerHook: 0,
duration: 600
})
.setPin("#stickyElement")
.addTo(controller);
setPin фиксирует элемент на экране на время действия
сцены.duration) определяет, как долго
элемент остаётся закреплённым.triggerHook для тонкой настройки момента
срабатывания.forEach и
селекторы.setPin эффективно использовать для фиксированных
баннеров или интерактивных секций.Привязка к элементам в ScrollMagic — это основной инструмент для создания динамических и интерактивных эффектов при прокрутке, обеспечивающий точный контроль над моментом срабатывания, продолжительностью действия и синхронизацией с анимациями.