ScrollMagic — это JavaScript-библиотека, которая позволяет управлять анимацией и поведением элементов на странице в зависимости от позиции скролла. Одним из наиболее популярных применений является выделение текста при прокрутке, когда пользователь скроллит страницу, а определённые фрагменты текста подсвечиваются или анимируются.
Все сцены в ScrollMagic управляются через Controller. Он отвечает за отслеживание позиции скролла и синхронизацию сцен с окнами просмотра.
// Инициализация контроллера
var controller = new ScrollMagic.Controller();
Контроллер может быть глобальным для всей страницы или локальным для конкретного контейнера с прокруткой. В случае обычной вертикальной страницы достаточно одного контроллера.
Для того чтобы текст выделялся при достижении определённой позиции скролла, создается сцена (Scene). Сцена содержит три основных параметра:
triggerElement — элемент, который запускает сцену при
попадании в видимую область.triggerHook — положение триггера на экране (0 — верх, 1
— низ, 0.5 — центр).duration — длина сцены, за которую будет происходить
действие. Можно указывать в пикселях или в процентах.Пример создания сцены для подсветки абзаца:
var scene = new ScrollMagic.Scene({
triggerElement: "#paragraph1",
triggerHook: 0.5,
duration: "50%"
})
.setClassToggle("#paragraph1", "highlight") // добавление класса при активации
.addTo(controller);
Здесь класс highlight будет добавлен к элементу
#paragraph1, когда триггер достигнет середины экрана, и
снимется, когда сцена завершится.
Если нужно подсвечивать несколько абзацев по мере скролла, можно использовать цикл по NodeList:
var paragraphs = document.querySelectorAll(".text-section");
paragraphs.forEach(function(paragraph) {
new ScrollMagic.Scene({
triggerElement: paragraph,
triggerHook: 0.7,
duration: "40%"
})
.setClassToggle(paragraph, "highlight")
.addTo(controller);
});
Такой подход позволяет автоматически создавать сцены для каждого текстового блока, без необходимости дублировать код.
ScrollMagic прекрасно интегрируется с библиотекой GSAP, что позволяет не просто добавлять классы, а создавать плавные анимации текста.
Пример плавного изменения цвета текста:
gsap.registerPlugin();
var paragraphs = document.querySelectorAll(".text-section");
paragraphs.forEach(function(paragraph) {
var tween = gsap.to(paragraph, { color: "#ff0000", duration: 0.5 });
new ScrollMagic.Scene({
triggerElement: paragraph,
triggerHook: 0.7,
duration: "50%"
})
.setTween(tween)
.addTo(controller);
});
В этом примере при прокрутке текста цвет плавно изменяется на красный, а после выхода из сцены возвращается к исходному цвету.
Для более сложных сценариев можно использовать события сцены:
enter, leave, start,
end. Например, для изменения состояния меню в зависимости
от текущего выделенного текста:
new ScrollMagic.Scene({
triggerElement: "#paragraph2",
triggerHook: 0.5
})
.on("enter", function() {
console.log("Параграф 2 активен");
})
.on("leave", function() {
console.log("Параграф 2 неактивен");
})
.addTo(controller);
Использование событий позволяет строить динамическую логику подсветки, например, менять активный пункт в боковом меню.
Для корректной работы на разных экранах важно учитывать:
0.8 для
маленьких экранов, чтобы подсветка запускалась чуть ниже."40%") вместо фиксированных пикселей, чтобы сцена
масштабировалась с высотой окна.Помимо изменения цвета, можно комбинировать анимации и классы:
.highlight {
background-color: yellow;
font-weight: bold;
transition: all 0.3s ease;
}
Вместо простого setClassToggle, можно использовать
setTween для анимации размера, прозрачности, смещения
текста и других свойств.
duration: 0 для мгновенного выделения,
если анимация не нужна.Эти техники позволяют создавать эффектные страницы с динамическим выделением текста при скролле, обеспечивая плавность анимаций и интерактивность интерфейса.