Fullpage-эффект предполагает прокрутку, при которой каждая секция страницы занимает весь экран и плавно сменяет предыдущую. Библиотека ScrollMagic предоставляет мощные инструменты для управления скроллом и анимациями на основе позиции прокрутки. Ключевые концепции включают сцены (Scenes), контроллеры (Controllers) и привязку анимаций к скроллу через TweenMax/GSAP.
Для создания базового fullpage-эффекта необходимо:
var controller = new ScrollMagic.Controller();
Контроллер управляет всеми сценами на странице и отслеживает позицию прокрутки.
var scene = new ScrollMagic.Scene({
triggerElement: "#section1",
duration: "100%", // продолжительность сцены равна высоте окна
triggerHook: 0 // начало сцены в верхней точке окна
})
.setPin("#section1") // закрепление секции на весь экран
.addTo(controller);
Пояснения к параметрам:
triggerElement – элемент, при достижении которого
активируется сцена.duration – длина сцены в пикселях или в процентах от
окна. Для fullpage-эффекта удобно использовать "100%".triggerHook – точка запуска сцены на экране (0 – верх,
0.5 – центр, 1 – низ)..setPin() закрепляет элемент, создавая эффект, когда
секция не уходит с экрана до окончания сцены.Для анимации элементов внутри секции используют GSAP. Например, постепенное появление текста при прокрутке:
var tween = gsap.from("#section1 .text", {opacity: 0, y: 50});
var scene = new ScrollMagic.Scene({
triggerElement: "#section1",
duration: "50%",
triggerHook: 0.5
})
.setTween(tween)
.addTo(controller);
duration задаёт интервал, в течение которого анимация
привязана к скроллу.triggerHook: 0.5 гарантирует запуск в центре
экрана.Fullpage-эффект часто требует последовательного закрепления всех секций. Структура кода для трёх секций выглядит так:
["#section1", "#section2", "#section3"].forEach(function(section){
new ScrollMagic.Scene({
triggerElement: section,
duration: "100%",
triggerHook: 0
})
.setPin(section)
.addTo(controller);
});
Это позволяет каждой секции занимать весь экран, а при скролле следующая секция плавно заменяет предыдущую.
Для динамичного визуального эффекта часто используют параллакс. Элементы внутри секции могут двигаться с разной скоростью:
var tweenParallax = gsap.to("#section2 .background", {y: "-50%", ease: "none"});
new ScrollMagic.Scene({
triggerElement: "#section2",
duration: "100%",
triggerHook: 0
})
.setTween(tweenParallax)
.addTo(controller);
ease: "none" обеспечивает линейное движение, полностью
синхронизированное со скроллом.y: "-50%" задаёт смещение фона относительно прокрутки
секции.ScrollMagic позволяет комбинировать несколько анимаций в одной сцене или создавать цепочки:
var timeline = gsap.timeline();
timeline
.from("#section3 .title", {opacity: 0, y: -30})
.from("#section3 .content", {opacity: 0, y: 30});
new ScrollMagic.Scene({
triggerElement: "#section3",
duration: "80%",
triggerHook: 0.2
})
.setTween(timeline)
.addTo(controller);
Использование timeline упрощает управление сложными последовательностями анимаций и позволяет синхронизировать движения нескольких элементов.
requestAnimationFrame в GSAP
автоматически синхронизирует анимацию с перерисовкой.ScrollMagic предоставляет методы .addIndicators() для
визуальной отладки сцен и .remove() или
.destroy() для динамического управления сценами. Это удобно
при создании интерактивных лендингов, где секции могут появляться или
исчезать в зависимости от действий пользователя.
Использование ScrollMagic совместно с GSAP позволяет создавать плавные, интерактивные fullpage-страницы с закреплением секций, параллаксом и сложными анимациями без потери производительности.