Библиотека AOS (Animate on Scroll) предоставляет механизм для добавления анимаций при прокрутке страницы. Одной из ключевых возможностей является использование глобальных обработчиков событий, которые позволяют отслеживать состояние анимации на уровне всего документа и реагировать на её изменение.
AOS генерирует несколько событий, которые могут быть привязаны к элементам или к всему документу через глобальные обработчики:
aos:in – срабатывает, когда элемент
становится видимым на экране и анимация начинается.aos:out – срабатывает, когда элемент
покидает видимую область и анимация завершена.aos:refresh – инициируется после
обновления внутренних размеров элементов, пересчета
offset-значений.aos:reset – происходит при сбросе
состояния анимации элемента, например после изменения DOM.Эти события можно использовать для глобального управления поведением анимаций, создания последовательностей эффектов или интеграции с другими библиотеками.
Глобальные обработчики устанавливаются на объект
document с помощью стандартного метода
addEventListener. Пример базовой привязки:
document.addEventListener('aos:in', ({ detail }) => {
console.log('Элемент появился:', detail);
});
document.addEventListener('aos:out', ({ detail }) => {
console.log('Элемент исчез:', detail);
});
Пояснение:
detail содержит DOM-элемент, который инициировал
событие.aos:refreshСобытие aos:refresh полезно в динамических интерфейсах,
когда размеры или положение элементов могут изменяться после загрузки
страницы. Пример:
document.addEventListener('aos:refresh', () => {
console.log('AOS пересчитал позиции элементов');
});
Часто его используют совместно с динамическими библиотеками, например при подгрузке контента через AJAX, чтобы анимации корректно срабатывали для новых элементов.
aos:reset и контроль анимацийaos:reset позволяет принудительно сбросить состояние
анимации элемента, возвращая его к исходной позиции и стилю. Это
особенно важно при повторном использовании элементов на одних и тех же
страницах или при переходах между разделами SPA (Single Page
Application):
document.addEventListener('aos:reset', ({ detail }) => {
console.log('Сброс анимации для элемента:', detail);
});
let animatedElementsCount = 0;
document.addEventListener('aos:in', () => {
animatedElementsCount++;
console.log(`Анимировано элементов: ${animatedElementsCount}`);
});
document.addEventListener('aos:in', ({ detail }) => {
const next = detail.nextElementSibling;
if(next && next.classList.contains('aos-init')) {
next.setAttribute('data-aos', 'fade-up');
AOS.refresh();
}
});
document.addEventListener('aos:out', ({ detail }) => {
detail.classList.remove('aos-animate');
});
data-aos, независимо от конкретного типа
анимации.data-aos необходимо вызывать AOS.refresh(),
чтобы глобальные обработчики корректно сработали для них.Глобальные обработчики событий в AOS открывают возможности централизованного управления анимациями, позволяют строить динамичные интерфейсы, реагировать на изменения DOM и обеспечивают гибкость при интеграции с другими скриптами. Они являются фундаментальным инструментом для сложных анимационных решений на веб-страницах.