Підступна війна росії проти України. Орієнтовні втрати ворога
(станом на 24.09.2026)
1523980
осіб
443
літаків
356
гелікоптерів
12367
танків
25402
ББМ
50240
артилерія
1669
ППО
2154
РСЗВ
152782
машин
35
кораблі і катери

Як додати анімацію завантаження (preloader) на сайт

24/09/2026

Під час завантаження «важкого» контенту — високороздільних зображень, кастомних шрифтів або скриптів аналітики — користувач часто бачить напівпорожній екран зі зламаною версткою (Layout Shift). Це створює відчуття повільної роботи ресурсу та погіршує досвід користувача (UX).

Прелоадер (Preloader / Loading screen) — це елемент інтерфейсу, який перекриває вміст сторінки на час рендерингу ресурсов та інформує відвідувача про процес завантаження. Створення якісного завантажувача не вимагає важких JS-бібліотек чи плагінів — усе це легко реалізується за допомогою кількох рядків HTML, плавної CSS-анімації та чистого Vanilla JS.

 

1. Навіщо потрібен прелоадер та які бувають типи

Головне завдання екрана завантаження — зменшити суб’єктивний час очікування (Perceived Performance). Коли користувач бачить анімацію, мозок сприймає затримку як контрольований процес, а не як збій системи.

У сучасній веб-розробці використовуються три основні підходи до анімації завантаження:

  • Full-screen Spinner (Класичний екранний спінер): Перекриває всю сторінку оверлеєм із центрованим крутильним елементом. Найкраще підходить для сайтів із великою кількістю медіа-контенту чи промо-лендінгів.
  • Progress Bar (Індикатор прогресу у верхній частині): Тонка смужка у верхній частині екрана (як у YouTube або Telegram), яка заповнюється в міру завантаження сторінки.
  • Skeleton Screens (Каркасна анімація): Показ сірих блоків-заглушок, що формою повторюють майбутній контент. Найбільш сучасний підхід для складної динамічної веб-розробок (Vue, Nuxt, React).

 

2. Порівняльний аналіз типів завантажувачів

Тип прелоадера Переваги Сфера застосування
Full-screen Overlay Повністю приховує процес скачування важких елементів та FOUT/FOIT шрифтів. Простий у реалізації. Промо-сайти, фотогалереї, корпоративні ресурси з великими банерами.
Progress Bar Мінімалістичний, не перекриває контент, не дратує при повторних переходах. Інтернет-магазини, багатосторінкові блоги, новинні портали.
Skeleton Screen Максимальний рівень UX: створює відчуття, що контент завантажується миттєво. Веб-додатки (SPA/PWA), особисті кабінети, каталоги товарів із AJAX-фільтрацією.

 

3. Покрокова реалізація класичного прелоадера (практика)

Реалізуємо повноекранний прелоадер із апаратно прискореною CSS-анімацією та обробкою події завантаження у Vanilla JS.

 

Крок 1: HTML-структура

Розмістіть цей блок одразу після відкриваючого тегу <body>, щоб він рендерився першим:

<div id="page-preloader" class="preloader">
    <div class="spinner"></div>
</div>

Крок 2: CSS-стилі та анімація

Використовуємо CSS-властивості transform та opacity, які обробляються графічним процесором (GPU), не викликаючи повторного Reflow/Repaint сторінки:

/* Оверлей на весь екран */
.preloader {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: #ffffff;
    display: flex;
    justify-content: center;
    align-items: center;
    z-index: 99999;
    opacity: 1;
    visibility: visible;
    transition: opacity 0.5s ease, visibility 0.5s ease;
}
/* Спінер завантаження */
.spinner {
    width: 50px;
    height: 50px;
    border: 5px solid #f3f3f3;
    border-top: 5px solid #3498db;
    border-radius: 50%;
    animation: spin 1s linear infinite;
}
/* Анімація обертання */
@keyframes spin {
    0% { transform: rotate(0deg); }
    100% { transform: rotate(360deg); }
}
/* Стан прихованості */
.preloader--hidden {
    opacity: 0;
    visibility: hidden;
}

Крок 3: Скрипт Vanilla JS

Ми використовуємо подію window.addEventListener('load'), яка спрацьовує тільки тоді, коли завантажився весь DOM, стилі, зображення та шрифти. Також додаємо страховий таймаут (Fallback Timeout) на випадок зависання зовнішніх ресурсів:

document.addEventListener('DOMContentLoaded', () => {
    const preloader = document.getElementById('page-preloader');
    const hidePreloader = () => {
        if (preloader && !preloader.classList.contains('preloader--hidden')) {
            preloader.classList.add('preloader--hidden');            
            // Видаляємо з DOM після завершення CSS-переходу для звільнення пам'яті
            preloader.addEventListener('transitionend', () => {
                preloader.remove();
            }, { once: true });
        }
    };
    // Приховуємо прелоадер після повного завантаження всіх ресурсів
    window.addEventListener('load', hidePreloader);
    // Страховий таймер (Fallback): якщо якась картинка зависла, приховуємо прелоадер через 5 секунд
    setTimeout(hidePreloader, 5000);
});

 

Фронтенд-порада розробника: Завжди дбайте про продуктивність та крайні випадки (edge cases). По-перше, обов’язково видаляйте елемент прелоадера з DOM-дерева через .remove() після завершення анімації приховування, щоб він не споживав оперативну пам’ять і не перехоплював кліки. По-друге, переконайтеся, що на час роботи прелоадера на тегу body не залишається overflow: hidden, інакше прокрутка сайту може виявитися заблокованою при помилках завантаження.

 

Підсумок: Власний Vanilla JS прелоадер — це легке, надійне та безпечне рішення, яке займає лічені кілобайти і не залежить від сторонніх бібліотек. Використовуйте апаратні CSS-анімації, налаштовуйте розумні таймаути відключення — і ваш сайт виглядатиме професійно та монолітно навіть на повільних мобільних мережах.

 

Категорії:

Перегляди 166
розкажіть друзям:

Напишіть тут свою думку/питання

Ваша пошта не публікуватиметься. Обов’язкові поля позначені *