Прелоадинг — это техника, позволяющая заранее подготовить элементы страницы к анимации или визуальным изменениям до того, как они попадут в область видимости пользователя. В связке с ScrollMagic прелоадинг обеспечивает плавное и синхронное появление анимаций при прокрутке, предотвращает рывки и ускоряет восприятие контента.
ScrollMagic позволяет создавать сцены (Scene), которые
реагируют на положение скролла, управляя анимациями, триггерами и
продолжительностью действия. Для прелоадинга ключевым моментом является
контроль состояния элементов до момента их появления на экране.
Для эффективного прелоадинга элементы следует поместить в скрытое состояние с помощью CSS. Обычно это делается через:
.preload-element {
opacity: 0;
transform: translateY(50px);
transition: opacity 0.5s ease-out, transform 0.5s ease-out;
}
При этом элементы визуально остаются на месте, но полностью невидимы и готовы к появлению. ScrollMagic будет управлять их стилями через события входа в сцену.
Для управления сценами необходимо создать экземпляр контроллера:
var controller = new ScrollMagic.Controller();
Контроллер обеспечивает связь между скроллом страницы и сценами, позволяя синхронизировать анимации с положением прокрутки. Без него сцены работать не будут.
Сцена в ScrollMagic создается с указанием триггера, который
определяет момент запуска анимации, и опционально длительности
(duration), влияющей на «растянутые» анимации:
var scene = new ScrollMagic.Scene({
triggerElement: ".preload-element", // элемент, на котором срабатывает сцена
triggerHook: 0.9, // позиция триггера относительно viewport (0 — верх, 1 — низ)
reverse: false // сцена не откатывается при прокрутке вверх
})
.setClassToggle(".preload-element", "visible") // добавление класса для анимации
.addTo(controller);
Класс visible в CSS:
.preload-element.visible {
opacity: 1;
transform: translateY(0);
}
Таким образом, при достижении элемента областью видимости добавляется класс, запускающий плавное появление.
Для более сложных эффектов вместо простого переключения классов можно
применять библиотеку GSAP, интегрированную со
ScrollMagic через setTween:
var tween = gsap.fromTo(".preload-element",
{ opacity: 0, y: 50 },
{ opacity: 1, y: 0, duration: 1, ease: "power2.out" }
);
var scene = new ScrollMagic.Scene({
triggerElement: ".preload-element",
triggerHook: 0.8,
reverse: false
})
.setTween(tween)
.addTo(controller);
Преимущество такого подхода — возможность задавать сложные кривые анимации, синхронизацию нескольких объектов и контроль времени воспроизведения.
Прелоадинг часто комбинируется с lazy loading
изображений и видео. До момента появления элемента в зоне видимости
медиа-файлы могут не загружаться, что ускоряет начальную загрузку
страницы. После срабатывания сцены ScrollMagic можно динамически
подставлять атрибут src или запускать видео:
var scene = new ScrollMagic.Scene({
triggerElement: ".preload-image",
triggerHook: 0.9
})
.on("enter", function() {
var img = document.querySelector(".preload-image");
if (!img.src) {
img.src = img.dataset.src;
}
})
.addTo(controller);
Прелоадинг в ScrollMagic хорошо сочетается с параллакс-эффектами. Элементы могут появляться с разной скоростью движения относительно скролла:
var tween = gsap.to(".preload-parallax", { y: "-50%", ease: "none" });
var scene = new ScrollMagic.Scene({
triggerElement: ".preload-section",
duration: "200%"
})
.setTween(tween)
.addTo(controller);
Такой подход позволяет создать ощущение глубины и динамики страницы, улучшая визуальное восприятие.
Для комплексного прелоадинга нескольких блоков можно использовать тайминги и цепочки сцен:
document.querySelectorAll(".preload-block").forEach((block, index) => {
var tween = gsap.fromTo(block,
{ opacity: 0, scale: 0.8 },
{ opacity: 1, scale: 1, duration: 0.6, delay: index * 0.2 }
);
new ScrollMagic.Scene({
triggerElement: block,
triggerHook: 0.85,
reverse: false
})
.setTween(tween)
.addTo(controller);
});
Каждый блок появляется с небольшим интервалом, создавая плавный каскадный эффект. Такая техника особенно эффективна для списков, галерей и секций с текстом.
При больших страницах с множеством анимируемых элементов важно учитывать нагрузку на браузер. Рекомендуется:
reverse: false для элементов, которые не
требуют отката анимации.Эти меры помогают избежать тормозов и повышают плавность скроллинга.
ScrollMagic предоставляет события enter,
leave, start и end, что позволяет
гибко управлять прелоадингом и анимациями в зависимости от поведения
пользователя:
scene.on("enter", function(event) {
console.log("Элемент вошел в зону видимости:", event.target);
});
scene.on("leave", function(event) {
console.log("Элемент покинул зону видимости:", event.target);
});
Комбинируя события с анимациями и lazy loading, создается полноценная система прелоадинга, которая не только визуально привлекательна, но и экономит ресурсы.