Для начала работы с библиотекой AOS необходимо подключить её стили и скрипты в проект:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/aos@2.3.4/dist/aos.css" />
<script src="https://cdn.jsdelivr.net/npm/aos@2.3.4/dist/aos.js"></script>
После подключения вызывается метод AOS.init(), который
активирует базовую функциональность анимаций при скролле:
AOS.init({
duration: 800, // продолжительность анимации в миллисекундах
easing: 'ease-in-out', // тип анимации
once: true, // анимация срабатывает один раз
});
Параметр once позволяет контролировать, будет ли элемент
анимироваться повторно при повторном скролле. Этот параметр особенно
полезен для улучшения производительности на страницах с большим
количеством анимированных блоков.
Библиотека предоставляет несколько событий, позволяющих отслеживать жизненный цикл анимации элемента:
aos:in – срабатывает, когда элемент
появляется в зоне видимости и начинает анимацию.aos:out – срабатывает, когда элемент
выходит из зоны видимости.aos:destroy – вызывается при
уничтожении элемента, если требуется очистка ресурсов.Пример использования:
document.addEventListener('aos:in', ({ detail }) => {
console.log('Элемент появился:', detail);
});
document.addEventListener('aos:out', ({ detail }) => {
console.log('Элемент покинул экран:', detail);
});
В detail передаётся объект DOM-элемента, на который
срабатывает событие, что позволяет выполнять индивидуальные действия для
каждого блока.
События AOS можно использовать для динамического изменения контента и поведения элементов:
document.addEventListener('aos:in', ({ detail }) => {
detail.classList.add('highlight');
});
document.addEventListener('aos:in', ({ detail }) => {
anime({
targets: detail,
translateX: [0, 100],
duration: 1000
});
});
document.addEventListener('aos:out', ({ detail }) => {
const video = detail.querySelector('video');
if (video) video.pause();
});
Такой подход позволяет запускать и останавливать мультимедиа, инициировать API-вызовы или подгружать данные только тогда, когда элемент реально виден пользователю.
Иногда требуется обновить или заново запустить анимацию на элементе:
AOS.refresh();
Метод refresh() пересчитывает позиции элементов на
странице и повторно инициализирует анимации. Он полезен, если
DOM-структура динамически меняется после загрузки страницы, например,
при подгрузке контента через AJAX.
Каждому элементу можно задать дополнительные атрибуты, влияющие на поведение анимации:
data-aos-delay – задержка перед
запуском анимации.data-aos-duration – индивидуальная
длительность.data-aos-once – перезапуск анимации
только один раз.Пример комбинирования:
<div data-aos="fade-up" data-aos-delay="200" data-aos-duration="1000" data-aos-once="true">
Контент с индивидуальной анимацией
</div>
При появлении блока событие aos:in сработает с учётом
всех этих настроек, что позволяет точно синхронизировать анимацию с
другими элементами страницы.
AOS легко комбинируется с React, Vue или Angular через прослушивание событий на корневом элементе:
useEffect(() => {
AOS.init({ duration: 600 });
const handleIn = ({ detail }) => {
console.log('React компонент анимирован', detail);
};
document.addEventListener('aos:in', handleIn);
return () => {
document.removeEventListener('aos:in', handleIn);
};
}, []);
Подобная интеграция позволяет запускать дополнительные анимации или логику компонентов только тогда, когда пользователь видит соответствующий блок, снижая нагрузку на рендеринг и улучшая UX.
Комбинация прослушивания событий aos:in и
aos:out с динамическим изменением DOM и запуском
JS-анимаций делает AOS мощным инструментом для интерактивных
интерфейсов.