ScrollMagic — это мощная библиотека для создания интерактивных скролл-эффектов в веб-приложениях на JavaScript. Основной принцип работы заключается в привязке анимаций к позиции скролла, что позволяет управлять визуальными эффектами динамически.
В ScrollMagic анимация реализуется через объект Scene. Сцена определяет, когда и как происходят визуальные изменения. Для перехода между картинками обычно используется следующая структура:
const controller = new ScrollMagic.Controller();
const scene = new ScrollMagic.Scene({
triggerElement: "#image-section", // элемент, который запускает анимацию
duration: 500, // длина сцены в пикселях
triggerHook: 0.5 // точка срабатывания (0 — верх страницы, 1 — низ)
})
.setTween("#image1", {opacity: 0}) // анимация, изменяющая прозрачность первого изображения
.addTo(controller);
Ключевые моменты:
0, анимация произойдет мгновенно при достижении
триггера.Для создания эффекта плавного перехода между картинками удобно
использовать одновременные анимации с TimelineMax или
GSAP:
const timeline = gsap.timeline();
timeline
.to("#image1", {opacity: 0, duration: 1})
.to("#image2", {opacity: 1, duration: 1}, "-=0.5"); // перекрытие на 0.5 секунды
const scene = new ScrollMagic.Scene({
triggerElement: "#image-section",
duration: 500,
triggerHook: 0.5
})
.setTween(timeline)
.addTo(controller);
Важно: использование отрицательного значения
смещения ("-=0.5") позволяет создать эффект наложения
анимаций, делая переход более плавным.
ScrollMagic позволяет синхронизировать анимацию с позицией скролла. Для эффекта перехода между картинками это означает, что прозрачность одной картинки уменьшается пропорционально скроллу, а другой — увеличивается.
const scene = new ScrollMagic.Scene({
triggerElement: "#image-section",
duration: window.innerHeight, // анимация длится на высоту окна
})
.setTween("#image1", {opacity: 0})
.addTo(controller);
При таком подходе анимация не привязана ко времени, а к положению скролла, что делает переход максимально плавным и естественным.
Эффект параллакса добавляет глубину при скролле, создавая ощущение
движения фона относительно переднего плана. Для картинок это может быть
реализовано через изменение y-позиции:
const timeline = gsap.timeline();
timeline.to("#image2", {y: -100, opacity: 1, duration: 1});
const scene = new ScrollMagic.Scene({
triggerElement: "#image-section",
duration: 600
})
.setTween(timeline)
.addTo(controller);
Совет: комбинация прозрачности и вертикального смещения усиливает визуальное ощущение динамики и делает переходы более выразительными.
Если нужно реализовать несколько последовательных переходов между
картинками, рекомендуется использовать отдельные сцены для каждой пары
изображений или один комплексный TimelineMax, объединяющий
все анимации:
const timeline = gsap.timeline();
timeline
.to("#image1", {opacity: 0, duration: 1})
.to("#image2", {opacity: 1, duration: 1})
.to("#image2", {opacity: 0, duration: 1})
.to("#image3", {opacity: 1, duration: 1});
const scene = new ScrollMagic.Scene({
triggerElement: "#gallery",
duration: 1500
})
.setTween(timeline)
.addTo(controller);
Для корректного отображения на разных устройствах важно использовать относительные единицы и динамическую высоту сцен:
const scene = new ScrollMagic.Scene({
triggerElement: "#image-section",
duration: () => window.innerHeight, // адаптация к высоте окна
})
.setTween(timeline)
.addTo(controller);
Также следует обновлять контроллер при изменении размеров окна:
window.addEventListener("resize", () => {
controller.update(true);
});
Хотя ScrollMagic отлично работает с GSAP, также возможна интеграция с
чистыми CSS-переходами через classToggle:
const scene = new ScrollMagic.Scene({
triggerElement: "#image-section",
duration: 500
})
.setClassToggle("#image2", "visible") // добавление класса с анимацией CSS
.addTo(controller);
CSS может содержать:
#image2 {
opacity: 0;
transition: opacity 1s ease;
}
#image2.visible {
opacity: 1;
}
Этот метод подходит для простых эффектов, экономит ресурсы и упрощает код, когда не требуется сложная временная синхронизация.
top,
left, width).TimelineMax.Эти подходы позволяют строить сложные визуальные истории, контролируемые скроллом, с высокой плавностью и эстетикой переходов.