ScrollMagic — это библиотека для создания анимаций на основе прокрутки страницы. Типографические эффекты позволяют управлять появлением, исчезновением и движением текста, создавая интерактивные и динамичные интерфейсы. Основная логика заключается в связывании сцены (Scene) с DOM-элементом текста и определением триггерной позиции на странице.
Каждый эффект начинается с создания сцены. Классический пример:
// Инициализация контроллера
var controller = new ScrollMagic.Controller();
// Создание сцены для анимации текста
var scene = new ScrollMagic.Scene({
triggerElement: "#header-text", // элемент, с которого начинается анимация
duration: 300, // длина эффекта в пикселях прокрутки
triggerHook: 0.8 // точка на экране, в которой срабатывает эффект
})
.setClassToggle("#header-text", "visible") // добавление класса при активации
.addTo(controller);
Ключевые моменты:
triggerElement определяет DOM-элемент, от которого
начинается сцена.duration задаёт, насколько длинной будет анимация в
пикселях прокрутки.triggerHook определяет точку на экране (от 0 до 1), где
триггер активируется: 0 — верх страницы, 1 — низ страницы.Типичный эффект — постепенное появление текста при прокрутке. Для этого используется комбинация ScrollMagic с CSS-анимациями:
#header-text {
opacity: 0;
transform: translateY(50px);
transition: opacity 0.6s ease-out, transform 0.6s ease-out;
}
#header-text.visible {
opacity: 1;
transform: translateY(0);
}
Сцена ScrollMagic управляет добавлением класса visible,
а CSS создаёт плавное появление.
Для более сложных эффектов текст можно разбивать на отдельные элементы — слова или буквы:
<h1 id="animated-text">
<span class="char">H</span>
<span class="char">e</span>
<span class="char">l</span>
<span class="char">l</span>
<span class="char">o</span>
</h1>
Затем с помощью ScrollMagic можно задать последовательное появление:
var chars = document.querySelectorAll("#animated-text .char");
chars.forEach((char, index) => {
var scene = new ScrollMagic.Scene({
triggerElement: char,
triggerHook: 0.9,
duration: 0
})
.setClassToggle(char, "visible")
.addTo(controller);
});
.char {
opacity: 0;
display: inline-block;
transform: translateY(20px);
transition: opacity 0.4s ease-out, transform 0.4s ease-out;
transition-delay: calc(var(--i) * 0.05s);
}
.char.visible {
opacity: 1;
transform: translateY(0);
}
Важно: использование переменной --i
позволяет управлять задержкой анимации для каждой буквы, создавая эффект
каскада.
Параллакс-анимация делает текст движущимся относительно прокрутки, создавая глубину. ScrollMagic в сочетании с TweenMax/TweenLite позволяет реализовать это:
var tween = TweenMax.to("#parallax-text", 1, {
y: -100,
ease: Power1.easeOut
});
var scene = new ScrollMagic.Scene({
triggerElement: "#section-parallax",
triggerHook: 0.5,
duration: 500
})
.setTween(tween)
.addTo(controller);
Особенности:
y: -100 перемещает текст вверх на 100 пикселей по мере
прокрутки.setTween(), обеспечивая плавные анимации.Для длинных текстовых блоков полезно создавать эффект постепенного появления каждой строки:
var lines = document.querySelectorAll(".line");
lines.forEach((line, idx) => {
new ScrollMagic.Scene({
triggerElement: line,
triggerHook: 0.85
})
.setClassToggle(line, "visible")
.addTo(controller);
});
CSS:
.line {
opacity: 0;
transform: translateY(30px);
transition: all 0.5s ease-out;
}
.line.visible {
opacity: 1;
transform: translateY(0);
}
Каждая строка появляется отдельно при достижении заданной точки экрана, создавая плавный эффект чтения.
ScrollMagic позволяет комбинировать:
Пример комбинированной сцены:
var tween = TweenMax.staggerFrom("#animated-text .char", 0.5, {y:50, opacity:0}, 0.05);
new ScrollMagic.Scene({
triggerElement: "#animated-text",
triggerHook: 0.8
})
.setTween(tween)
.addTo(controller);
Этот подход объединяет каскадное появление с плавным движением, создавая эффектный типографический блок.
duration для создания непрерывных анимаций
текста.triggerHook для синхронизации анимации с
прокруткой визуально, а не только логически.Эти техники позволяют создавать богатые интерактивные типографические эффекты, которые усиливают визуальное восприятие текста на странице и делают интерфейс динамичным и современным.