Для работы с библиотекой AOS (Animate on Scroll) необходимо подключить CSS и JS-файлы. Это может быть выполнено через CDN или локальные файлы проекта:
<link href="https://cdn.jsdelivr.net/npm/aos@2.3.4/dist/aos.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/aos@2.3.4/dist/aos.js"></script>
Инициализация производится с помощью вызова:
AOS.init({
offset: 120, // Смещение от точки прокрутки для активации анимации
delay: 0, // Задержка перед запуском анимации
duration: 400, // Продолжительность анимации
easing: 'ease', // Функция ускорения
once: false, // Анимация выполняется только один раз
mirror: false // Анимация повторяется при скролле вверх
});
Эти параметры позволяют контролировать поведение анимации, делая её гибкой под конкретные задачи.
AOS основан на отслеживании видимости элементов в области просмотра
браузера с помощью события scroll и проверки положения
элемента через getBoundingClientRect. Основные факторы,
влияющие на производительность:
scroll.width, height) могут
вызывать перерисовку и reflow.scroll с высокой частотой могут снижать FPS при большом
количестве элементов.Для оптимизации AOS предоставляет возможность использовать параметр
once: true, чтобы анимация запускалась только один раз и не
требовала постоянного отслеживания позиции элемента.
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('animate');
}
});
}, { threshold: 0.5 });
document.querySelectorAll('.anim-element').forEach(el => observer.observe(el));
Плюсы:
Минусы:
window.addEventListener('scroll', () => {
const elements = document.querySelectorAll('.anim-element');
elements.forEach(el => {
const rect = el.getBoundingClientRect();
if (rect.top < window.innerHeight && rect.bottom > 0) {
el.classList.add('animate');
}
});
});
Плюсы:
Минусы:
Плюсы:
Минусы:
once: false.Минимизация количества анимируемых элементов Разделение контента на блоки и анимация только критически важных элементов.
Использование transform и opacity Эффекты, затрагивающие GPU (translate, scale, opacity), работают быстрее, чем манипуляции с layout.
Параметр once При установке
once: true анимация не повторяется при прокрутке вверх, что
снижает нагрузку на scroll-события.
Lazy initialization Инициализация AOS только после полной загрузки DOM или после появления нужных элементов в viewport. Пример:
document.addEventListener('DOMContentLoaded', () => {
AOS.init({ once: true });
});
| Подход | Кол-во элементов | Нагрузка на CPU | Контроль | Простота |
|---|---|---|---|---|
| AOS | Любое | Средняя | Средний | Высокая |
| Intersection Observer + CSS/JS | Любое | Низкая | Высокий | Средняя |
| Scroll + getBoundingClientRect() | >50 | Высокая | Высокий | Средняя |
scroll-обработчик подходит для мелких проектов,
но плохо масштабируется.На мобильных браузерах важны:
transform и
opacity.once: true для снижения нагрузки на
слабые процессоры.AOS автоматически применяет CSS transitions, которые обычно хорошо оптимизированы для мобильных GPU, но ручная проверка количества элементов и длительности анимации всегда улучшает производительность.