Библиотека AOS (Animate on Scroll) предоставляет удобный способ анимации элементов при прокрутке страницы. Один из продвинутых подходов к управлению анимациями — использование CSS-переменных для настройки параметров AOS, таких как длительность анимации, задержка, смещение и функция плавности.
После подключения AOS через <link> для стилей и
<script> для библиотеки, необходимо инициализировать
её с помощью:
AOS.init({
duration: 1000, // стандартная длительность анимации
easing: 'ease-in-out', // функция плавности
once: true // анимация срабатывает один раз
});
Эти значения можно вынести в CSS-переменные для гибкой настройки на уровне стилей. Например:
:root {
--aos-duration: 1200ms;
--aos-delay: 200ms;
--aos-easing: cubic-bezier(0.4, 0, 0.2, 1);
}
Для применения переменных к конкретным элементам используются
стандартные атрибуты data-aos-*. Пример:
<div
data-aos="fade-up"
data-aos-duration="var(--aos-duration)"
data-aos-delay="var(--aos-delay)"
data-aos-easing="var(--aos-easing)">
Анимированный блок
</div>
Здесь var(--aos-duration) динамически подставляет
значение из CSS, что позволяет централизованно управлять всеми
анимациями без необходимости менять параметры в каждом
HTML-элементе.
CSS-переменные поддерживают каскадирование, что делает возможным локальное переопределение параметров для отдельных секций страницы. Например:
.section-featured {
--aos-duration: 1500ms;
--aos-delay: 400ms;
}
.section-testimonials {
--aos-duration: 800ms;
--aos-delay: 100ms;
}
HTML-разметка:
<section class="section-featured">
<div data-aos="fade-right" data-aos-duration="var(--aos-duration)">
Контент с индивидуальной длительностью
</div>
</section>
<section class="section-testimonials">
<div data-aos="fade-left" data-aos-duration="var(--aos-duration)">
Контент с другой длительностью
</div>
</section>
Такой подход обеспечивает централизованное управление параметрами анимаций и упрощает поддержку проекта, особенно при масштабировании страницы.
CSS-переменные могут быть динамически изменяемыми через JavaScript. Это позволяет управлять анимациями в зависимости от состояния страницы или пользовательских действий:
document.documentElement.style.setProperty('--aos-duration', '2000ms');
document.documentElement.style.setProperty('--aos-delay', '500ms');
AOS.refresh(); // обновление всех анимаций после изменения переменных
Метод AOS.refresh() необходим для того, чтобы библиотека
пересчитала все позиции элементов после динамических изменений.
CSS-переменные хорошо интегрируются с адаптивной версткой. Например, можно изменять длительность анимации для мобильных устройств:
@media (max-width: 768px) {
:root {
--aos-duration: 800ms;
--aos-delay: 100ms;
}
}
HTML-элементы автоматически будут использовать новые значения без дополнительных изменений в разметке.
<div
data-aos="zoom-in"
data-aos-duration="var(--aos-duration)"
data-aos-delay="calc(var(--aos-delay) + 100ms)">
Комбинированная анимация
</div>
:root {
--aos-easing-fast: cubic-bezier(0.2, 0, 0, 1);
--aos-easing-slow: cubic-bezier(0.4, 0, 0.2, 1);
}
<div data-aos="fade-up" data-aos-easing="var(--aos-easing-fast)">
Быстрая анимация
</div>
<div data-aos="fade-down" data-aos-easing="var(--aos-easing-slow)">
Медленная анимация
</div>
.section-cards {
--aos-delay-step: 100ms;
}
const cards = document.querySelectorAll('.section-cards .card');
cards.forEach((card, index) => {
card.setAttribute('data-aos-delay', `calc(var(--aos-delay-step) * ${index})`);
});
Такой подход создаёт эффект каскадной анимации, где каждый следующий элемент появляется с небольшой задержкой относительно предыдущего.
Использование CSS-переменных в связке с AOS обеспечивает максимальную гибкость управления анимациями, улучшает поддержку кода и позволяет легко внедрять адаптивные, динамические и групповые анимации без избыточного дублирования атрибутов в HTML.