Библиотека AOS (Animate on Scroll) предназначена для создания анимаций при прокрутке страницы, что позволяет привлекать внимание к элементам без написания сложных CSS-анимаций вручную. Однако при большом количестве анимированных блоков возникает нагрузка на рендеринг и снижение производительности. Оптимизация количества анимированных элементов становится критически важной для плавной работы страницы.
Для снижения нагрузки следует выбирать только те элементы, которые действительно требуют анимации. Это достигается несколькими способами:
Использование классов-оберток Присвоение анимации только определённым блокам, например:
<div class="feature aos-init" data-aos="fade-up"></div>
<div class="feature"></div>
В примере анимация применяется только к элементу с классом
aos-init. Остальные блоки остаются статичными.
Отложенная инициализация AOS можно запускать после полной загрузки важного контента, чтобы не нагружать браузер одновременно всеми анимациями:
document.addEventListener('DOMContentLoaded', function() {
AOS.init({
once: true, // анимация срабатывает один раз
offset: 120,
duration: 600
});
});Если страница содержит сотни элементов, можно инициализировать анимацию по мере появления элементов в DOM:
const lazyElements = document.querySelectorAll('.lazy-aos');
lazyElements.forEach(el => {
if (isInViewport(el)) {
el.classList.add('aos-animate');
}
});
function isInViewport(element) {
const rect = element.getBoundingClientRect();
return (
rect.top <= window.innerHeight && rect.bottom >= 0
);
}
Таким образом, элементы за пределами видимой области страницы не нагружают рендер.
data-aos-delay и
data-aos-durationКонтроль скорости и задержки анимаций позволяет равномерно распределять нагрузку:
<div data-aos="fade-up" data-aos-delay="100" data-aos-duration="800"></div>
<div data-aos="fade-up" data-aos-delay="200" data-aos-duration="800"></div>
data-aos-delay – задержка перед запуском анимации.data-aos-duration – длительность анимации.Правильное использование этих параметров предотвращает одновременное срабатывание всех анимаций и уменьшает пиковую нагрузку на GPU.
AOS поддерживает кастомные настройки через init:
AOS.init({
once: true,
mirror: false,
offset: 120,
duration: 700,
});
once: true – анимация срабатывает один раз при
прокрутке.mirror: false – анимации не повторяются при прокрутке
вверх.Это существенно сокращает количество активных анимаций на странице и повышает плавность интерфейса.
Для больших страниц с длинными списками элементов полезно разбивать контент на логические секции и присваивать анимацию только текущей секции:
const sections = document.querySelectorAll('.section');
sections.forEach(section => {
const items = section.querySelectorAll('.animate-item');
items.forEach(item => {
item.setAttribute('data-aos', 'fade-up');
});
});
Такой подход позволяет не перегружать браузер анимацией сразу всего контента, а работать только с видимой областью.
Не все эффекты AOS одинаково «тяжелые». Эффекты типа
fade, fade-up, slide-up менее
ресурсоемки по сравнению с zoom-in или сложными
комбинациями трансформаций. Для оптимизации лучше выбирать
лёгкие эффекты для массовых элементов и оставлять сложные
только для ключевых блоков.
Для элементов, анимация которых не требуется повторно, можно сбрасывать AOS-классы после завершения:
document.querySelectorAll('.aos-animate').forEach(el => {
el.addEventListener('transitionend', () => {
el.classList.remove('aos-animate');
});
});
Это освобождает ресурсы браузера, предотвращая постоянное поддержание состояния анимации в DOM.
once: true и разумные задержки.Соблюдение этих правил позволяет поддерживать высокую производительность страниц с AOS, даже при большом количестве элементов и сложной верстке.