Инициализация начинается с корректного подключения библиотеки. AOS может быть добавлена несколькими способами:
Через CDN:
<link href="https://unpkg.com/aos@2.3.4/dist/aos.css" rel="stylesheet">
<script src="https://unpkg.com/aos@2.3.4/dist/aos.js"></script>
Через пакетный менеджер (npm/yarn):
npm install aos --save
Импорт в Jav * aScript:
import AOS from 'aos';
import 'aos/dist/aos.css';
Ключевым моментом является подключение как JavaScript-файла, так и CSS-стилей. Без стилей анимации не будут отображаться корректно.
После подключения необходимо выполнить инициализацию:
AOS.init();
Этот вызов активирует обработчики прокрутки и применяет анимации к
элементам, содержащим атрибут data-aos.
Инициализацию следует выполнять после загрузки DOM, чтобы библиотека могла корректно найти все элементы:
document.addEventListener('DOMContentLoaded', function () {
AOS.init();
});
Или при использовании современных сборщиков:
AOS.init();
(если код выполняется после полной загрузки DOM)
Метод AOS.init() принимает объект настроек, позволяющий
управлять поведением анимаций:
AOS.init({
offset: 120,
delay: 0,
duration: 400,
easing: 'ease',
once: false,
mirror: false,
anchorPlacement: 'top-bottom'
});
AOS отслеживает позицию элементов относительно области просмотра (viewport) и добавляет CSS-классы при достижении заданной точки.
Основной механизм:
aos-animateonce: false) → класс удаляетсяЭто позволяет управлять анимацией исключительно через CSS.
Инициализация на клиенте работает только при наличии атрибутов в разметке:
<div data-aos="fade-up"></div>
Дополнительные настройки можно задавать прямо в HTML:
<div
data-aos="fade-up"
data-aos-delay="200"
data-aos-duration="1000"
data-aos-once="true">
</div>
Приоритет:
AOS.init()При динамическом изменении DOM (например, при загрузке контента через AJAX) требуется обновление:
AOS.refresh();
Если изменения значительные (например, добавлено много элементов):
AOS.refreshHard();
Разница:
В одностраничных приложениях (React, Vue, Angular) важно учитывать жизненный цикл компонентов.
React (пример):
import { useEffect } from 'react';
import AOS from 'aos';
useEffect(() => {
AOS.init();
}, []);
При обновлении контента:
useEffect(() => {
AOS.refresh();
});
Vue:
mounted() {
AOS.init();
}
Библиотека предоставляет события, которые можно использовать при инициализации:
document.addEventListener('aos:in', ({ detail }) => {
console.log('Элемент появился:', detail);
});
document.addEventListener('aos:out', ({ detail }) => {
console.log('Элемент исчез:', detail);
});
Это позволяет добавлять кастомную логику при появлении элементов.
При инициализации важно учитывать нагрузку:
mirror, если не требуетсяonce: true для статичных страницПример оптимизированной конфигурации:
AOS.init({
once: true,
duration: 600,
easing: 'ease-out-cubic'
});
Для мобильных устройств иногда требуется отключение анимаций:
AOS.init({
disable: 'mobile'
});
Возможные значения:
true — отключить полностью'mobile' — отключить на мобильных'phone' / 'tablet' — выборочноТакже можно передать функцию:
AOS.init({
disable: function () {
return window.innerWidth < 768;
}
});
По умолчанию AOS отслеживает прокрутку window. Для
кастомных контейнеров требуется дополнительная настройка:
AOS.init({
startEvent: 'DOMContentLoaded'
});
И использование CSS overflow-контейнеров требует ручного контроля
обновлений через refresh().
Корректная последовательность:
AOS.init()AOS.refresh()Нарушение порядка часто приводит к отсутствию анимаций.
1. Инициализация до загрузки DOM
AOS.init(); // слишком рано
2. Отсутствие CSS Анимации не видны, хотя JS работает.
3. Конфликт с другими библиотеками Некоторые CSS-анимации могут переопределять стили AOS.
4. Отсутствие refresh при динамическом контенте
Пример полной конфигурации:
AOS.init({
offset: 100,
delay: 50,
duration: 800,
easing: 'ease-in-out',
once: true,
mirror: false,
anchorPlacement: 'center-bottom',
disable: false,
startEvent: 'DOMContentLoaded',
animatedClassName: 'aos-animate',
initClassName: 'aos-init',
useClassNames: false
});
Каждый параметр влияет на момент и стиль появления элементов, что позволяет точно контролировать поведение анимаций на странице.