Библиотека AOS (Animate on Scroll) предоставляет возможность анимации
элементов при их появлении в области видимости. Помимо стандартной
инициализации через AOS.init(), часто требуется создавать
индивидуальные обработчики событий для отдельных
элементов, чтобы управлять анимацией более гибко, запускать
дополнительный код или интегрировать с другими библиотеками.
aos:in и aos:outКаждый элемент с анимацией AOS генерирует два ключевых события:
aos:in – срабатывает, когда элемент
полностью входит в видимую область экрана и анимация запускается.aos:out – срабатывает, когда элемент
покидает область видимости.Пример подключения обработчика к конкретному элементу:
const myElement = document.querySelector('#animated-element');
myElement.addEventListener('aos:in', () => {
console.log('Элемент появился на экране');
// Дополнительная логика, например, запуск таймера или изменение стиля
});
myElement.addEventListener('aos:out', () => {
console.log('Элемент покинул экран');
// Возможность сбросить анимацию или скрыть элемент
});
Особенности:
data-aos.Библиотека AOS позволяет перезапускать анимацию на элементе
вручную с помощью метода AOS.refresh(), но для
более тонкого управления можно использовать класс
aos-animate:
const element = document.querySelector('.box');
// Добавление анимации вручную
element.classList.add('aos-init'); // Подготовка элемента к анимации
element.classList.add('aos-animate'); // Запуск анимации
aos-init – базовое состояние элемента
перед запуском.aos-animate – запускает анимацию,
имитируя появление элемента в области видимости.aos-animate, чтобы повторно
запускать анимацию при скролле.Можно создавать разные обработчики для элементов с разными анимациями:
const fadeElements = document.querySelectorAll('[data-aos="fade-up"]');
const zoomElements = document.querySelectorAll('[data-aos="zoom-in"]');
fadeElements.forEach(el => {
el.addEventListener('aos:in', () => {
console.log('fade-up элемент появился');
el.style.border = '2px solid red';
});
});
zoomElements.forEach(el => {
el.addEventListener('aos:in', () => {
console.log('zoom-in элемент появился');
el.style.transform += ' rotate(10deg)';
});
});
Для элементов, создаваемых динамически через JavaScript, важно обновлять AOS после вставки в DOM:
const container = document.querySelector('#dynamic-container');
// Создание нового элемента
const newEl = document.createElement('div');
newEl.setAttribute('data-aos', 'fade-right');
newEl.textContent = 'Новый элемент с анимацией';
container.appendChild(newEl);
// Обновление AOS для нового элемента
AOS.refresh();
// Добавление индивидуального обработчика
newEl.addEventListener('aos:in', () => {
console.log('Динамический элемент появился');
});
AOS.refresh() пересчитывает позиции всех
элементов с анимацией.В больших проектах часто удобно делегировать обработку событий, чтобы не привязываться к каждому элементу индивидуально:
document.addEventListener('aos:in', function(event) {
const el = event.target;
if (el.matches('.special-item')) {
el.style.backgroundColor = 'yellow';
console.log('Специальный элемент активирован');
}
});
event.target всегда указывает на элемент, который
инициировал событие.Индивидуальные обработчики позволяют интегрировать анимацию с любой бизнес-логикой:
const counter = document.querySelector('.counter');
counter.addEventListener('aos:in', () => {
let value = 0;
const interval = setInterval(() => {
value++;
counter.textContent = value;
if (value >= 100) clearInterval(interval);
}, 30);
});
aos:in и aos:out для точного
управления.AOS.refresh().Индивидуальные обработчики делают библиотеку AOS не просто инструментом для декоративной анимации, а полноценным механизмом управления динамическим контентом.