Библиотека ScrollMagic предназначена для создания анимаций и интерактивного поведения элементов при прокрутке страницы. Работа с заливкой и обводкой элементов в сочетании с ScrollMagic требует понимания взаимодействия CSS-свойств, анимационных библиотек (например, GSAP) и структуры сцен.
Ключевой элемент ScrollMagic — сцена
(Scene), которая определяет, в какой момент и
каким образом активируются изменения стилей. Сцена связывается с
элементом через селектор и может использоваться для анимации заливки
(background-color) или обводки (border).
Пример создания сцены для изменения цвета фона:
const controller = new ScrollMagic.Controller();
const scene = new ScrollMagic.Scene({
triggerElement: "#box",
duration: 300,
triggerHook: 0.5
})
.setTween("#box", { backgroundColor: "#3498db", ease: "linear" })
.addTo(controller);
Разбор ключевых параметров:
triggerElement — элемент, при достижении которого
начинается анимация.duration — продолжительность эффекта в пикселях
прокрутки.triggerHook — положение триггера относительно окна
просмотра (0 — верх, 1 — низ)..setTween — привязка анимации. Можно использовать GSAP
для плавного изменения свойств CSS.Обводка элементов (border) в CSS имеет несколько
характеристик, которые можно анимировать: цвет, ширину, стиль и радиус.
Наиболее практично изменять цвет и толщину, поскольку
другие свойства могут быть не поддержаны при плавной анимации.
gsap.to("#box", {
borderColor: "#e74c3c",
borderWidth: "5px",
duration: 1
});
const borderScene = new ScrollMagic.Scene({
triggerElement: "#box",
duration: 400
})
.setTween("#box", { borderColor: "#e74c3c", borderWidth: "5px", ease: "linear" })
.addTo(controller);
Совет: для плавного изменения ширины и цвета одновременно лучше использовать библиотеку GSAP, так как чистый CSS через ScrollMagic ограничен.
Можно одновременно анимировать несколько свойств, создавая комплексный эффект:
const combinedScene = new ScrollMagic.Scene({
triggerElement: "#box",
duration: 500
})
.setTween(
gsap.to("#box", {
backgroundColor: "#2ecc71",
borderColor: "#27ae60",
borderWidth: "6px",
duration: 1
})
)
.addTo(controller);
Это позволяет создавать эффекты, при которых элемент одновременно меняет фон и границу при прокрутке.
ScrollMagic предоставляет методы для слежения за состоянием сцены:
on("enter", callback) — выполняется при входе
триггерного элемента в область видимости.on("leave", callback) — срабатывает при выходе.on("progress", callback) — отслеживает прогресс
анимации в диапазоне от 0 до 1.Пример динамического управления цветом обводки по прогрессу:
const progressScene = new ScrollMagic.Scene({
triggerElement: "#box",
duration: 400
})
.addTo(controller);
progressScene.on("progress", function(event) {
const progress = event.progress;
const red = Math.round(255 * progress);
const green = Math.round(200 * (1 - progress));
document.querySelector("#box").style.borderColor = `rgb(${red}, ${green}, 100)`;
});
Для более сложной заливки можно использовать градиенты и
прозрачность (opacity):
gsap.to("#box", {
background: "linear-gradient(45deg, #f39c12, #e74c3c)",
opacity: 0.8,
duration: 1
});
ScrollMagic позволяет привязать это к прокрутке точно так же, как с простыми цветами. Использование градиентов требует применения GSAP, так как CSS-анимация градиента напрямую ограничена.
Для SVG элементов заливка (fill) и обводка
(stroke) анимируются аналогично:
gsap.to("#svgShape", {
fill: "#9b59b6",
stroke: "#8e44ad",
strokeWidth: 4,
duration: 1
});
const svgScene = new ScrollMagic.Scene({
triggerElement: "#svgContainer",
duration: 300
})
.setTween("#svgShape", {
fill: "#9b59b6",
stroke: "#8e44ad",
strokeWidth: 4,
ease: "linear"
})
.addTo(controller);
Использование .setTween с SVG позволяет добиться эффекта
плавного изменения цвета и толщины линий, что часто применимо для
интерактивных графиков и иллюстраций.
stroke и fill
вместо border и background.progress, чтобы управлять сложными
эффектами, которые нельзя просто задать через
.setTween.Эти подходы позволяют создавать богатые интерактивные эффекты с заливкой и обводкой элементов, полностью используя возможности ScrollMagic в связке с анимационными библиотеками.