Для реализации анимации масштаба элементов в ScrollMagic используются
сцены (Scene) и триггеры (triggerElement),
которые задают момент начала анимации при прокрутке страницы. Основная
идея заключается в том, чтобы привязать изменение CSS-свойства
transform: scale() к прогрессу прокрутки.
Первым шагом необходимо создать контроллер, который управляет всеми сценами:
var controller = new ScrollMagic.Controller();
Далее создается сцена для конкретного элемента:
var scene = new ScrollMagic.Scene({
triggerElement: "#scaleElement", // элемент, который будет триггером
duration: 500, // длительность анимации в пикселях прокрутки
triggerHook: 0.5 // момент на экране, где начнется сцена (0 – верх, 1 – низ)
});
Для плавной анимации масштаба чаще всего используется библиотека GSAP. Например, можно увеличить элемент в 1.5 раза:
var tween = gsap.to("#scaleElement", {scale: 1.5, duration: 1, ease: "power1.inOut"});
scene.setTween(tween);
controller.addScene(scene);
Ключевые моменты здесь:
scale — задает коэффициент увеличения или
уменьшения.duration — определяет длину анимации по времени (в
контексте GSAP, но ScrollMagic будет управлять прогрессом по
прокрутке).ease — функция сглаживания, которая делает анимацию
плавной.ScrollMagic автоматически управляет прогрессом tween по прокрутке.
Можно отслеживать прогресс с помощью события progress:
scene.on("progress", function(event) {
console.log("Progress: " + event.progress);
});
event.progress принимает значения от 0 до
1 и позволяет создавать динамические эффекты в зависимости
от степени прокрутки.
По умолчанию сцена ScrollMagic поддерживает обратное воспроизведение:
scene.reverse(true);
Это значит, что при прокрутке страницы вверх анимация масштаба будет возвращаться к исходному состоянию.
Для одновременной анимации нескольких элементов можно создать несколько сцен:
gsap.utils.toArray(".scaleElements").forEach(function(elem) {
var tween = gsap.to(elem, {scale: 2, duration: 1, ease: "power2.out"});
var scene = new ScrollMagic.Scene({
triggerElement: elem,
duration: 400,
triggerHook: 0.6
})
.setTween(tween)
.addTo(controller);
});
Использование gsap.utils.toArray позволяет избежать
ручного дублирования кода и автоматически создавать сцены для всех
элементов с классом .scaleElements.
Анимацию масштаба можно комбинировать с изменением прозрачности, смещением по оси X/Y или поворотом:
var tween = gsap.to("#scaleElement", {
scale: 1.8,
x: 100,
opacity: 0.5,
rotation: 15,
duration: 1,
ease: "power1.inOut"
});
var scene = new ScrollMagic.Scene({
triggerElement: "#scaleElement",
duration: 600,
triggerHook: 0.5
})
.setTween(tween)
.addTo(controller);
triggerElement может быть любым DOM-элементом,
определяющим начало анимации.triggerHook принимает значения от 0 до 1, где 0 — верх
экрана, 1 — низ.offset позволяет смещать точку срабатывания
относительно элемента:var scene = new ScrollMagic.Scene({
triggerElement: "#scaleElement",
duration: 500,
triggerHook: 0.5,
offset: 100 // начнется на 100px ниже триггера
});
gsap.to("#scaleElement", {scale: 1.5, duration: 1, ease: "linear"});
Сцену можно сделать reversible, чтобы при обратной
прокрутке элемент возвращался к scale: 1.
var tween = gsap.to("#scaleElement", {scale: 2, opacity: 0.5, duration: 1});
Используется offset для запуска анимации позже, чем
появляется элемент на экране.
will-change: transform в CSS для элементов
с анимацией масштаба.scale — основной коэффициент масштаба.scaleX, scaleY — отдельное масштабирование
по осям.transformOrigin — точка, вокруг которой выполняется
масштабирование:gsap.to("#scaleElement", {scale: 1.5, transformOrigin: "center center"});
ease — функция сглаживания (например,
power1.inOut, linear,
bounce).Массив этих инструментов позволяет создавать эффектные, интерактивные и отзывчивые анимации масштаба при прокрутке страницы, делая интерфейс более динамичным и визуально привлекательным.