Для начала необходимо подключить библиотеку AOS к проекту. Существует несколько способов:
Через CDN:
<link href="https://cdn.jsdelivr.net/npm/aos@2.3.4/dist/aos.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/aos@2.3.4/dist/aos.js"></script>
Через npm:
npm install aos --save
После установки через npm подключение производится в основном JS-файле:
import AOS from 'aos';
import 'aos/dist/aos.css';
Инициализация выполняется следующим образом:
AOS.init({
offset: 120, // смещение триггера анимации относительно верха окна
delay: 0, // задержка перед началом анимации (в мс)
duration: 400, // продолжительность анимации (в мс)
easing: 'ease', // функция сглаживания анимации
once: false, // анимация срабатывает только один раз или при каждом скролле
mirror: false, // анимация проигрывается при скролле вверх
});
Для элементов, которые должны анимироваться при прокрутке,
используется атрибут data-aos. Примеры базовых
анимаций:
<div data-aos="fade-up">Появление снизу</div>
<div data-aos="fade-down">Появление сверху</div>
<div data-aos="fade-left">Появление слева</div>
<div data-aos="fade-right">Появление справа</div>
<div data-aos="zoom-in">Масштабирование внутрь</div>
<div data-aos="zoom-out">Масштабирование наружу</div>
Дополнительные атрибуты для тонкой настройки анимации:
data-aos-offset="200" – изменяет расстояние от верха
окна до элемента, при котором срабатывает анимация.data-aos-delay="300" – задержка старта анимации в
миллисекундах.data-aos-duration="1000" – продолжительность анимации в
миллисекундах.data-aos-easing="ease-in-out" – функция
сглаживания.data-aos-once="true" – анимация выполняется один
раз.data-aos-mirror="true" – анимация повторяется при
скролле вверх.В проектах типа портфолио и онлайн-визиток AOS позволяет добавить динамичность без сложных JavaScript-кодов. Основные примеры использования:
1. Анимация блоков проектов
<section class="projects">
<div class="project-card" data-aos="fade-up" data-aos-delay="100" data-aos-duration="800">
<img src="project1.jpg" alt="Проект 1">
<h3>Проект 1</h3>
<p>Описание проекта.</p>
</div>
<div class="project-card" data-aos="fade-up" data-aos-delay="200" data-aos-duration="800">
<img src="project2.jpg" alt="Проект 2">
<h3>Проект 2</h3>
<p>Описание проекта.</p>
</div>
</section>
Ключевой момент: Использование различной задержки
(data-aos-delay) для последовательного появления
карточек создает эффект «ступенчатой» анимации, что улучшает визуальное
восприятие портфолио.
2. Анимация элементов визитки
<div class="contact-card" data-aos="zoom-in" data-aos-duration="600">
<h2>Имя Фамилия</h2>
<p>Должность</p>
<p>Email: example@mail.com</p>
</div>
Здесь эффект «масштабирования внутрь» подчеркивает важность контактов и делает карточку более заметной на странице.
3. Плавное появление секций
<section class="about-me" data-aos="fade-right" data-aos-offset="150" data-aos-duration="900">
<h2>Обо мне</h2>
<p>Краткая биография, навыки, достижения.</p>
</section>
<section class="skills" data-aos="fade-left" data-aos-offset="150" data-aos-duration="900">
<h2>Навыки</h2>
<ul>
<li>HTML / CSS</li>
<li>JavaScript / AOS</li>
<li>React / Vue</li>
</ul>
</section>
Эффект появления с противоположных сторон позволяет создавать визуальный баланс и удерживать внимание пользователя.
Для мобильных версий можно использовать медиазапросы и условные атрибуты:
@media (max-width: 768px) {
[data-aos] {
opacity: 1 !important;
transform: none !important;
}
}
Или инициализировать AOS с проверкой ширины окна:
if (window.innerWidth > 768) {
AOS.init({ once: true, duration: 600 });
}
once: true снижает
нагрузку на рендеринг при множественных анимациях.@keyframes с атрибутом data-aos для создания
уникальных эффектов.refresh() для обновления списка элементов после
динамического добавления контента через JS.AOS.refresh(); // обновление анимаций после добавления новых элементов в DOM
<div data-aos="...">
без конфликтов с жизненным циклом компонентов, главное —
инициализировать AOS после рендера.Эти подходы делают AOS универсальным инструментом для создания современного, динамичного и интерактивного портфолио или онлайн-визитки, при этом сохраняя легкость и производительность страницы.