Библиотека ScrollMagic позволяет управлять анимацией элементов на странице в зависимости от прокрутки. Одной из наиболее мощных возможностей является морфинг и трансформации элементов, когда свойства объекта изменяются плавно при скролле, создавая динамический визуальный эффект.
Для реализации трансформаций чаще всего применяется интеграция GSAP (GreenSock Animation Platform) с ScrollMagic. Tween’ы позволяют анимировать CSS-свойства или SVG-параметры, а ScrollMagic управляет моментом запуска анимации.
Пример создания базового Tween’а:
// Подключение GSAP
const tween = gsap.to(".box", {
x: 300,
rotation: 360,
scale: 1.5,
duration: 2,
ease: "power1.inOut"
});
В данном примере .box плавно перемещается на 300
пикселей вправо, вращается на 360° и увеличивается в 1.5 раза. Tween
создаёт основу для привязки к ScrollMagic-сцене.
Сцена отвечает за точку начала, конец и продолжительность анимации при скролле:
const controller = new ScrollMagic.Controller();
const scene = new ScrollMagic.Scene({
triggerElement: "#trigger",
duration: 500, // Длина анимации в пикселях прокрутки
triggerHook: 0.5 // Начало анимации в центре экрана
})
.setTween(tween)
.addTo(controller);
Ключевые параметры:
triggerElement — элемент, при котором начинается
анимация.duration — длина анимации, определяет, на какой
протяжённости прокрутки Tween будет полностью выполнен.triggerHook — точка на экране (0 = верх, 1 = низ), в
которой сцена активируется.Для морфинга фигур SVG используется Tween с анимацией атрибутов
d:
const svgTween = gsap.to("#svgPath", {
duration: 1,
attr: { d: "M10,80 C40,10 65,10 95,80 S150,150 180,80" },
ease: "power1.inOut"
});
const svgScene = new ScrollMagic.Scene({
triggerElement: "#svgTrigger",
duration: 400
})
.setTween(svgTween)
.addTo(controller);
Особенности:
d должны иметь одинаковое
количество контрольных точек.ScrollMagic позволяет объединять несколько Tween’ов в Timeline, создавая последовательные или параллельные трансформации:
const timeline = gsap.timeline();
timeline
.to(".box", { x: 200, duration: 1 })
.to(".box", { rotation: 180, scale: 1.2, duration: 1 }, "-=0.5");
const scene = new ScrollMagic.Scene({
triggerElement: "#trigger",
duration: 600
})
.setTween(timeline)
.addTo(controller);
"-=0.5" запускает вторую анимацию за 0.5 секунды до
конца первой, создавая плавный переход.Помимо SVG, можно анимировать любые CSS-свойства:
transform: translate, rotate,
scale — для движения и масштабирования.opacity — для плавного появления/исчезновения.filter: blur(), hue-rotate() — для
динамических визуальных эффектов.Пример:
const cssTween = gsap.to(".image", {
x: 150,
y: 50,
rotation: 45,
scale: 1.3,
opacity: 0.8,
duration: 2
});
const cssScene = new ScrollMagic.Scene({
triggerElement: "#imageTrigger",
duration: 500
})
.setTween(cssTween)
.addTo(controller);
Использование функции вместо фиксированных значений позволяет менять свойства динамически:
gsap.to(".circle", {
x: () => window.innerWidth / 2,
scale: () => Math.random() * 2,
duration: 1
});
Комбинирование pinning и морфинга позволяет фиксировать элемент и одновременно изменять его свойства при прокрутке:
const pinScene = new ScrollMagic.Scene({
triggerElement: "#pinTrigger",
duration: 800,
triggerHook: 0
})
.setPin("#pinElement")
.setTween(gsap.to("#pinElement", { scale: 2, rotation: 360 }))
.addTo(controller);
setPin фиксирует элемент на экране.d для SVG.Если требуется, могу подготовить отдельный подробный раздел с примерами сложных морфингов нескольких SVG одновременно, включая код Timeline и ScrollMagic-сцен для сложных интерактивных эффектов. Это будет расширение к уже представленным примерам и позволит создавать полноценные визуальные истории на сайте.