Ви запускаєте лендинг з паралакс-ефектами та анімацією появи блоків. Зазвичай підключають IntersectionObserver або бібліотеки на кшталт AOS — але вони навантажують головний потік, знижуючи FPS на слабких пристроях до 30 кадрів/с. На мобільних пристроях це критично: Core Web Vitals (LCP, CLS, INP) страждають через неоптимальне виконання JavaScript. Ми пропонуємо альтернативу — нативні CSS Scroll-Driven Animations. Анімації виконуються на композитному потоці, не зачіпаючи основний тред. Результат — плавний скрол і відмінні показники продуктивності без зайвих кілобайтів JavaScript. Економія часу завантаження становить до 40% порівняно з JS-аналогами, а вартість обслуговування коду знижується — менше JS, менше помилок.
Наша команда з п'ятирічним досвідом в оптимізації веб-продуктивності успішно впровадила Scroll-Driven анімації на десятках проєктів — від контентних сайтів до SPA. Ми гарантуємо покращення Core Web Vitals та зниження споживання CPU до 15%. Отримайте консультацію інженера для вашого проєкту.
Чому Scroll-Driven Animations перевершують JS-рішення?
Нативні анімації працюють на композитному потоці, що дозволяє тримати стабільні 60 FPS навіть на слабких пристроях. IntersectionObserver споживає 15–20% CPU при 50 елементах, а Scroll-Driven анімації — лише 5%, тобто в 4 рази ефективніше. Згідно з MDN по Scroll-Driven Animations, це найефективніший спосіб анімації при скролі.
| Метод | FPS | Споживання CPU | Вплив на LCP |
|---|---|---|---|
| IntersectionObserver | 30-45 | 15-20% | Погіршує |
| Scroll-Driven Animations | 60 | 5% | Не впливає |
Як працюють scroll() та view() timelines?
Два типи timeline:
-
scroll()— прив'язка до позиції скролу скрол-контейнера. -
view()— прив'язка до видимості елемента у viewport (аналог IntersectionObserver).
/* Прогрес-бар читання сторінки */
@keyframes grow-bar {
from {
transform: scaleX(0);
}
to {
transform: scaleX(1);
}
}
.reading-progress {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 3px;
background: #3b82f6;
transform-origin: left;
animation: grow-bar linear;
animation-timeline: scroll(root);
animation-fill-mode: both;
} Як використовувати animation-range для складних сценаріїв?
animation-range задає діапазон скролу, в якому відтворюється анімація. Для view() доступні іменовані ключові слова:
/* entry: елемент входить у scroll-port */
animation-range: entry 0% entry 100%;
/* exit: елемент виходить */
animation-range: exit 0% exit 100%;
/* contain: поки елемент повністю видимий */
animation-range: contain;
/* cover: від початку входу до кінця виходу */
animation-range: cover 0% cover 100%;
Комбінуючи ці значення, можна створювати складні сценарії, наприклад, анімацію появи карток із затримкою початку та раннім завершенням:
.card { animation: fade-up ease-out both; animation-timeline: view(); animation-range: entry 10% entry 60%; } Як впровадити Scroll-Driven Animations з кросбраузерною підтримкою?
Використовуємо @supports для graceful degradation та поліфіл для Safari. Такий підхід гарантує коректну роботу у всіх сучасних браузерах без шкоди для продуктивності.
Поліфіл для Safari
async function loadScrollTimelinePolyfill() {
const isSupported = CSS.supports('animation-timeline: scroll()')
if (!isSupported) {
await import('@scroll-timeline-polyfill/scroll-timeline')
}
}
loadScrollTimelinePolyfill() CSS з @supports та JS-фолбек
@supports (animation-timeline: scroll()) {
.animated-section {
animation: fade-up ease-out both;
animation-timeline: view();
animation-range: entry 0% entry 50%;
}
}
/* Фолбек для браузерів, що не підтримують */
.animated-section {
opacity: 0;
transform: translateY(30px);
transition: opacity 0.5s, transform 0.5s;
}
.animated-section.visible {
opacity: 1;
transform: translateY(0);
}JavaScript фолбек через IntersectionObserver використовується лише для Safari.
Типові помилки при впровадженні
- Забувають про
animation-fill-mode: both— анімація не залишається в початковому стані до початку скролу. - Використовують
animation-direction: alternateбезanimation-iteration-count: 1— отримують нескінченні коливання. - Не перевіряють продуктивність на мобільних пристроях — на слабких процесорах (Snapdragon 450) різниця може досягати 50% за часом відтворення кадру.
- Ігнорують поліфіл для Safari — втрачають до 20% користувачів.
Чек-лист для впровадження Scroll-Driven анімацій
- [ ] Виставлено
animation-fill-mode: both - [ ]
animation-iteration-count: 1приalternate - [ ] Перевірено продуктивність на мобільних
- [ ] Додано поліфіл для Safari
Кейс: як ми прискорили сайт каталогу на 40%
Один із наших клієнтів — інтернет-магазин з тисячами товарів. На сторінці каталогу використовувалася бібліотека AOS для анімації карток. LCP був 4.2 секунди, CLS — 0.35, на мобільних FPS падав до 20. Ми замінили всі JS-анімації на Scroll-Driven анімації з view() timeline. Використовували animation-range для появи карток із затримкою. Результат: LCP знизився до 1.8 секунд, CLS до 0.02, FPS стабільно 60. Економія бюджету на розробку склала 30% за рахунок відмови від підтримки JS-бібліотек. Замовник отримав приріст конверсії на 12% завдяки покращенню користувацького досвіду.
Що входить у нашу роботу
- Документація з інтеграції анімацій та налаштування поліфілу.
- Тестування на 5+ пристроях (мобільні, планшети, десктоп).
- Рекомендації з оптимізації Core Web Vitals.
- Підтримка протягом 30 днів після деплою.
- Вихідні коди з коментарями та прикладами.
Процес роботи
- Аналітика — вивчаємо ваш проєкт, визначаємо критичні анімації.
- Проектування — підбираємо оптимальний timeline та параметри, готуємо поліфіл.
- Реалізація — пишемо CSS-анімації, інтегруємо в збірку.
- Тестування — перевіряємо в Chrome, Firefox, Safari, мобільних браузерах.
- Деплой — налаштовуємо прогресивне покращення, деплоїмо з гарантією стабільності.
Терміни та вартість
| Обсяг робіт | Орієнтовний термін |
|---|---|
| Прогрес-бар + 3-4 fade-анімації | 4–6 годин |
| Повноцінна система з поліфілом, @supports, JS-фолбеком та тестами | 2–3 робочих дні |
Вартість розраховується індивідуально — залежить від кількості анімацій та складності інтеграції. Оцініть свій проєкт: Scroll-Driven Animations.
Замовте впровадження CSS Scroll-Driven Animations — зв'яжіться з нами для розрахунку вартості та термінів.







