ScrollMagic предоставляет мощные инструменты для создания анимаций при прокрутке страницы, и один из наиболее эффектных приёмов — анимация текста с разделением на отдельные символы или слова, часто называемая split-текстом. Такой подход позволяет создавать динамичные заголовки, интерактивные подписи и визуально привлекательные эффекты появления текста.
Для начала необходимо разделить текст на управляемые DOM-элементы. На практике это можно сделать с помощью чистого JavaScript или специализированных библиотек вроде SplitText из GSAP. Пример ручного разделения текста на символы:
const textElement = document.querySelector('.animated-text');
const textContent = textElement.textContent;
textElement.textContent = '';
textContent.split('').forEach(char => {
const span = document.createElement('span');
span.textContent = char;
span.style.display = 'inline-block';
textElement.appendChild(span);
});
Ключевой момент: каждый символ помещается в
отдельный span, что позволяет управлять его анимацией
индивидуально. Для слов можно использовать .split(' ') и
оборачивать каждое слово.
Для анимации split-текста при прокрутке создаётся сцена ScrollMagic:
const controller = new ScrollMagic.Controller();
const scene = new ScrollMagic.Scene({
triggerElement: '.animated-text', // элемент, с которого начинается анимация
duration: 300, // продолжительность анимации в пикселях прокрутки
triggerHook: 0.8 // точка срабатывания анимации (0 — верх, 1 — низ)
});
Особенности настройки:
triggerElement — DOM-элемент, который запускает
анимацию.duration — длина эффекта, чем больше значение, тем
плавнее анимация.triggerHook — регулирует момент срабатывания
относительно видимой области окна.Для управления каждым символом применяется библиотека анимаций, чаще всего GSAP:
const chars = document.querySelectorAll('.animated-text span');
const tween = gsap.fromTo(chars,
{ y: 50, opacity: 0 },
{
y: 0,
opacity: 1,
stagger: 0.05, // задержка между анимациями символов
ease: "power2.out"
}
);
scene.setTween(tween);
scene.addTo(controller);
Разбор параметров анимации:
y и opacity задают движение и прозрачность
символов.stagger позволяет создавать эффект поочерёдного
появления.ease отвечает за плавность движения, рекомендуются
power1.out, power2.out или
back.out для «живой» динамики.ScrollMagic позволяет добавлять события на жизненный цикл сцены:
scene.on("enter", () => {
console.log("Сцена активирована — анимация запущена");
});
scene.on("leave", () => {
console.log("Сцена покинута — можно сбросить стили");
});
Это удобно для повторного воспроизведения анимаций, изменения стилей элементов или запуска дополнительных эффектов, например, фоновых изменений или параллакса.
Split-текст отлично сочетается с параллакс-анимацией фона или других элементов. Пример сдвига фона при появлении текста:
gsap.to('.background', {
y: -100,
scrollTrigger: {
trigger: '.animated-text',
start: "top 80%",
end: "bottom 20%",
scrub: true
}
});
Особенности:
scrub: true синхронизирует движение фона с
прокруткой.Для больших текстов важно соблюдать несколько правил:
transform, opacity) вместо top
или left.transition или GSAP
color/backgroundColor.stagger с несколькими уровнями (chars внутри
words) для каскадного эффекта.<div class="animated-text">Пример split-текста</div>
.animated-text span {
display: inline-block;
will-change: transform, opacity;
}
Совет: всегда использовать will-change
для элементов, которые анимируются с transform/opacity, чтобы браузер
заранее оптимизировал рендеринг.
Эта методика позволяет создавать динамичные и профессионально выглядящие текстовые анимации, управляемые прокруткой, с высокой гибкостью и производительностью.