Для работы с библиотекой AOS в React необходимо сначала установить пакет через npm или yarn:
npm install aos --save
или
yarn add aos
После установки нужно импортировать стили и саму библиотеку в главный
файл компонента, например, в App.js:
import AOS from 'aos';
import 'aos/dist/aos.css';
import { useEffect } from 'react';
Инициализация происходит внутри хука useEffect, чтобы
AOS корректно работал после рендера компонентов:
function App() {
useEffect(() => {
AOS.init({
duration: 1200, // Продолжительность анимации в миллисекундах
once: true, // Анимация проигрывается только один раз при скролле
mirror: false, // Анимация проигрывается при скролле вверх
});
}, []);
return (
<div>
{/* Компоненты с анимацией */}
</div>
);
}
Для применения анимации к элементам React достаточно добавить
специальные data-* атрибуты. Основные атрибуты:
data-aos – тип анимации (fade,
fade-up, fade-down, zoom-in и другие).data-aos-duration – индивидуальная
продолжительность анимации в миллисекундах.data-aos-delay – задержка перед
запуском анимации.data-aos-offset – смещение
срабатывания анимации относительно верхнего края окна.data-aos-once – проигрывать анимацию
только один раз.Пример использования:
<div data-aos="fade-up" data-aos-duration="1000" data-aos-delay="200">
Контент с анимацией
</div>
Можно комбинировать несколько атрибутов для тонкой настройки:
<div
data-aos="zoom-in"
data-aos-duration="1500"
data-aos-offset="200"
data-aos-once="true"
>
Другой элемент
</div>
При работе с динамическими списками в React важно инициализировать
AOS после того, как контент появился в DOM. Для этого используют метод
AOS.refresh():
import { useEffect } from 'react';
function ItemList({ items }) {
useEffect(() => {
AOS.refresh(); // Обновляет анимации после рендера динамических элементов
}, [items]);
return (
<div>
{items.map((item, index) => (
<div key={index} data-aos="fade-right">
{item}
</div>
))}
</div>
);
}
Это особенно важно, если элементы списка появляются после асинхронной загрузки данных.
AOS корректно работает с любыми методами стилизации React, включая
CSS-модули и styled-components. Главное – правильно
подключить стили AOS и не переопределять их без необходимости. Пример с
styled-components:
import styled from 'styled-components';
const Box = styled.div`
width: 200px;
height: 200px;
background-color: coral;
margin: 20px;
`;
function AnimatedBox() {
useEffect(() => {
AOS.init({ duration: 800 });
}, []);
return <Box data-aos="flip-left" />;
}
Параметр mirror позволяет повторять анимацию при
прокрутке обратно вверх. В React можно комбинировать его с условной
отрисовкой компонентов:
function ScrollSection({ show }) {
useEffect(() => {
AOS.refresh();
}, [show]);
return show ? (
<div data-aos="fade-up" data-aos-mirror="true">
Секция с анимацией
</div>
) : null;
}
Для крупных проектов удобно создать отдельный файл конфигурации, чтобы использовать одни и те же настройки AOS во всем приложении:
// aosConfig.js
import AOS from 'aos';
import 'aos/dist/aos.css';
export const initAOS = () => {
AOS.init({
duration: 1000,
easing: 'ease-in-out',
once: false,
offset: 120,
});
};
И подключать в App.js:
import { initAOS } from './aosConfig';
useEffect(() => {
initAOS();
}, []);
Это упрощает поддержку анимаций и позволяет легко менять глобальные параметры без модификации отдельных компонентов.
Если приложение использует маршрутизацию, важно обновлять анимации при смене страниц, так как новые компоненты появляются после перехода:
import { useLocation } from 'react-router-dom';
function AnimatedRoutes() {
const location = useLocation();
useEffect(() => {
AOS.refresh();
}, [location.pathname]);
return (
<Routes location={location}>
{/* маршруты с анимированными компонентами */}
</Routes>
);
}
Это гарантирует, что анимации будут корректно запускаться после навигации между страницами.
once: true для элементов, которые не
требуют повторной анимации.react-window,
react-virtualized).AOS можно использовать с TypeScript, добавив типы:
import AOS, { AosOptions } from 'aos';
const options: AosOptions = {
duration: 800,
once: true,
};
useEffect(() => {
AOS.init(options);
}, []);
Это обеспечивает автодополнение и строгую проверку параметров, повышая надежность кода.
AOS в React позволяет создавать богатые анимационные эффекты при минимальных усилиях, сочетая гибкость настройки с простотой интеграции и совместимостью с современными подходами к рендерингу компонентов.