Библиотека AOS (Animate on Scroll) реализует анимацию элементов при прокрутке страницы. Триггеры анимаций в AOS зависят от положения элемента относительно окна просмотра, а также от настроек самой библиотеки. Корректная работа анимации требует внимательной настройки и иногда отладки, особенно при сложных макетах и динамически загружаемом контенте.
Триггер в AOS — это момент, когда элемент становится видимым на экране и начинает анимацию. Основные параметры, влияющие на триггер:
AOS.init({
offset: 200
});
Эта настройка заставит элемент анимироваться, когда он окажется на 200 пикселей ниже верхней границы окна.
anchorPlacement — определяет точку привязки элемента к окну, при которой срабатывает анимация. Возможные значения:
top-bottom — верх элемента достигает низа окна;center-center — центр элемента совпадает с центром
окна;bottom-top — нижняя часть элемента совпадает с верхом
окна.AOS.init({
anchorPlacement: 'center-center'
});
AOS.init({
once: true
});
Для диагностики проблем с триггером полезно определить, когда
элемент реально виден в окне просмотра. Это можно сделать с
помощью встроенных инструментов браузера или функции
IntersectionObserver, чтобы увидеть, совпадает ли момент
видимости с ожиданием AOS.
Пример проверки через консоль:
const elem = document.querySelector('.animate-me');
window.addEventListener('scroll', () => {
const rect = elem.getBoundingClientRect();
console.log(`top: ${rect.top}, bottom: ${rect.bottom}, window height: ${window.innerHeight}`);
});
Если значения top и bottom не соответствуют
заданному offset и anchorPlacement, анимация
может не запускаться вовремя.
Элемент не отображается при первой загрузке страницы
display: none или
появляется динамически.AOS.refresh():AOS.refresh();
Анимация срабатывает слишком поздно или слишком рано
offset или
anchorPlacement.getBoundingClientRect() и подкорректировать параметры.Анимация не повторяется при повторном скролле
once: true.once: false, если требуется
повторная анимация.document.addEventListener('aos:in', ({ detail }) => {
console.log('Элемент вошел в зону видимости', detail);
});
document.addEventListener('aos:out', ({ detail }) => {
console.log('Элемент покинул зону видимости', detail);
});
AOS.refreshHard() Используется
для полной переработки всех элементов на странице, включая динамически
добавленные, особенно полезно при SPA (single-page application).AOS.refreshHard();
outline: 1px solid red; для визуализации зоны, в
которой элемент должен анимироваться.offset с учётом высоты элемента и макета
страницы.anchorPlacement для точного контроля
момента запуска анимации.AOS.refresh() или AOS.refreshHard().getBoundingClientRect().aos:in и
aos:out для логирования и проверки порядка срабатывания
триггеров.AOS.init({
offset: 150,
once: false,
anchorPlacement: 'top-bottom'
});
document.querySelectorAll('.animate-me').forEach(el => {
el.addEventListener('aos:in', () => {
console.log('Анимация запущена для', el);
});
el.addEventListener('aos:out', () => {
console.log('Элемент вышел из зоны видимости', el);
});
});
// При динамическом добавлении элемента
const newEl = document.createElement('div');
newEl.classList.add('animate-me', 'aos-animate');
document.body.appendChild(newEl);
AOS.refresh();
Такой подход позволяет отследить каждое срабатывание
триггера, проверить корректность настроек offset и
anchorPlacement, а также обеспечить стабильную работу
анимаций для всех элементов страницы.