Библиотека AOS (Animate on Scroll) предназначена для
добавления анимаций элементов при скролле страницы. Она работает на
принципе отслеживания положения элементов относительно видимой области
браузера и запуска соответствующих CSS-анимаций. Для использования
достаточно подключить CSS и JS файлы AOS и инициализировать библиотеку
через функцию AOS.init().
AOS.init({
duration: 1200, // время анимации в миллисекундах
easing: 'ease-in-out', // плавность анимации
once: true, // анимация срабатывает один раз
});
Ключевые параметры:
duration – определяет длительность анимации. Можно
задавать разные значения для отдельных элементов через атрибут
data-aos-duration.easing – задает кривую ускорения. Популярные значения:
linear, ease, ease-in,
ease-out, ease-in-out.once – контролирует, будет ли анимация повторяться при
повторном скролле.Каждый элемент, который должен анимироваться, получает атрибуты
data-aos и дополнительные параметры:
<div data-aos="fade-up" data-aos-duration="800" data-aos-delay="200">
Контент
</div>
Основные атрибуты:
data-aos – тип анимации (fade-up,
fade-down, zoom-in, flip-left и
др.).data-aos-duration – индивидуальная длительность
анимации для конкретного элемента.data-aos-delay – задержка перед началом анимации.data-aos-offset – расстояние в пикселях от начала
видимой области, при котором запускается анимация.data-aos-anchor – элемент, относительно которого
считается позиция скролла.Плавность переходов достигается через согласование длительности, задержек и кривых ускорения для соседних элементов. Несогласованные значения создают эффект «рывка», когда элементы появляются с разной скоростью и неестественно.
Принципы согласованности:
Единый стиль easing Все элементы в одной секции должны использовать одинаковую кривую ускорения, например:
easing: 'ease-in-out'Градация задержек Для последовательного
появления элементов используют инкрементальные значения
data-aos-delay. Например, для списка из трёх элементов:
<li data-aos="fade-up" data-aos-delay="0">Элемент 1</li>
<li data-aos="fade-up" data-aos-delay="150">Элемент 2</li>
<li data-aos="fade-up" data-aos-delay="300">Элемент 3</li>
Такая стратегия создаёт эффект цепочки, где элементы плавно «выплывают» один за другим.
Согласованная длительность Чтобы анимации
выглядели гармонично, data-aos-duration должна быть
одинаковой или иметь небольшую разницу. Слишком разные значения вызывают
диссонанс.
Контроль позиции через offset Значение
data-aos-offset помогает точнее запускать анимацию в момент
появления элемента в видимой области. Для плавного эффекта рекомендуется
использовать одинаковое значение для элементов одного блока:
<div data-aos="fade-right" data-aos-offset="200">Блок 1</div>
<div data-aos="fade-left" data-aos-offset="200">Блок 2</div>Использование anchor для синхронизации Если
элементы находятся в разных контейнерах, можно задать
data-aos-anchor:
<section id="section1">
<div data-aos="fade-up" data-aos-anchor="#section1">Элемент</div>
</section>
Это гарантирует, что анимация запускается относительно начала определённого блока, а не страницы целиком.
Комбинирование анимаций Возможность одновременно
применять несколько эффектов через data-aos:
<div data-aos="fade-up" data-aos-anchor-placement="top-bottom" data-aos-delay="100" data-aos-duration="1000">
Контент
</div>
Здесь элементы одновременно смещаются вверх и изменяют прозрачность.
Адаптация под разные разрешения Для разных экранов можно менять параметры анимации через CSS-медиа-запросы и динамическое обновление AOS:
if(window.innerWidth < 768){
AOS.init({ duration: 800, offset: 100 });
} else {
AOS.init({ duration: 1200, offset: 200 });
}Перезапуск анимации при необходимости Метод
AOS.refresh() обновляет позиции элементов после
динамического изменения DOM, что важно для плавного запуска новых
анимаций после подгрузки контента.
<section class="features">
<div data-aos="fade-up" data-aos-delay="0" data-aos-duration="1000">Фича 1</div>
<div data-aos="fade-up" data-aos-delay="150" data-aos-duration="1000">Фича 2</div>
<div data-aos="fade-up" data-aos-delay="300" data-aos-duration="1000">Фича 3</div>
</section>
<script>
AOS.init({
duration: 1000,
easing: 'ease-in-out',
once: true
});
</script>
Здесь каждая фича появляется последовательно, создавая эффект плавного и согласованного перехода, а одинаковая длительность и кривая ускорения формируют визуальную гармонию.
once: true для элементов, которые
не требуют повторной анимации при скролле.Эти подходы сохраняют плавность даже на слабых устройствах и предотвращают лаги при интенсивной анимации.