При работе с библиотекой AOS (Animate on Scroll)
часто возникает задача анимации группы элементов с последовательным
эффектом, когда каждый следующий элемент появляется с небольшой
задержкой относительно предыдущего. Такой подход создаёт ощущение
динамичного потока и упрощает визуальное восприятие контента. В AOS для
реализации этого используется сочетание атрибутов
data-aos-delay и специальных методов генерации задержек
через JavaScript.
data-aos-delayАтрибут data-aos-delay задаёт задержку
старта анимации в миллисекундах. Стандартное применение для одного
элемента выглядит так:
<div data-aos="fade-up" data-aos-delay="200">
Элемент с задержкой 200 мс
</div>
Здесь анимация fade-up начнётся через 200 мс после того,
как элемент попадёт в область видимости. Для группы элементов можно
прописывать разные задержки вручную:
<div data-aos="fade-up" data-aos-delay="0">Элемент 1</div>
<div data-aos="fade-up" data-aos-delay="100">Элемент 2</div>
<div data-aos="fade-up" data-aos-delay="200">Элемент 3</div>
<div data-aos="fade-up" data-aos-delay="300">Элемент 4</div>
Такой подход эффективен для небольших списков, но становится трудоёмким при большом количестве элементов. В таких случаях рекомендуется динамическое присвоение задержек через JavaScript.
Для групп элементов удобно использовать циклы и вычисляемые значения задержки. Рассмотрим пример:
document.addEventListener("DOMContentLoaded", () => {
const items = document.querySelectorAll('.aos-group .aos-item');
const delayStep = 100; // задержка между элементами в мс
items.forEach((item, index) => {
item.setAttribute('data-aos', 'fade-up');
item.setAttribute('data-aos-delay', index * delayStep);
});
AOS.init({
duration: 800, // продолжительность анимации в мс
easing: 'ease-in-out',
once: true // анимация воспроизводится один раз
});
});
В этом примере:
items — коллекция элементов внутри контейнера с классом
.aos-group.delayStep задаёт интервал задержки между
элементами.index * delayStep обеспечивает каскадное появление
каждого следующего элемента.Такой подход позволяет легко управлять числом элементов и интервалом
задержки без ручного указания data-aos-delay.
Иногда требуется гибкая схема каскада, например разные скорости появления для разных подгрупп. В этом случае можно использовать кастомные атрибуты:
<div class="aos-item" data-group="1">Элемент A1</div>
<div class="aos-item" data-group="1">Элемент A2</div>
<div class="aos-item" data-group="2">Элемент B1</div>
<div class="aos-item" data-group="2">Элемент B2</div>
И скрипт для расчёта задержек по группам:
document.addEventListener("DOMContentLoaded", () => {
const groups = {};
const items = document.querySelectorAll('.aos-item');
items.forEach((item) => {
const group = item.getAttribute('data-group') || 'default';
if (!groups[group]) groups[group] = [];
groups[group].push(item);
});
Object.values(groups).forEach(groupItems => {
groupItems.forEach((item, index) => {
const delay = index * 150; // шаг задержки 150 мс
item.setAttribute('data-aos', 'fade-right');
item.setAttribute('data-aos-delay', delay);
});
});
AOS.init({ duration: 700, easing: 'ease-out', once: false });
});
Таким образом, можно создавать независимые каскадные анимации для разных секций страницы без дублирования кода.
Каскадные задержки работают с любыми анимациями AOS:
fade-up, fade-down, fade-left,
fade-right, zoom-in, flip-left и
др. Например:
<div class="aos-group">
<div class="aos-item" data-aos="fade-left">Элемент 1</div>
<div class="aos-item" data-aos="fade-left">Элемент 2</div>
<div class="aos-item" data-aos="fade-left">Элемент 3</div>
</div>
Комбинирование разных анимаций с каскадными задержками позволяет создавать визуально выразительные интерфейсы, например списки услуг, галереи и карточки товаров.
Основные опции, влияющие на каскадные анимации:
data-aos-delay.true.ease-in-out для естественного эффекта каскада.Пример инициализации:
AOS.init({
duration: 600,
easing: 'ease-in-out',
once: true,
offset: 120
});
window.innerWidth, уменьшая шаг на мобильных
устройствах.Эти техники позволяют создавать профессиональные, динамичные интерфейсы с плавными каскадными эффектами без перегрузки кода и вручную прописанных задержек.