Для использования библиотеки AOS (Animate on Scroll) в Angular-проекте необходимо установить пакет через npm:
npm install aos --save
После установки подключение стилей и скриптов можно выполнить несколькими способами:
styles
добавляется путь к CSS AOS, а в scripts — путь к JS."styles": [
"src/styles.css",
"node_modules/aos/dist/aos.css"
],
"scripts": [
"node_modules/aos/dist/aos.js"
]
main.ts или в нужный
компонент:import 'aos/dist/aos.css';
import * as AOS from 'aos';
Инициализация библиотеки должна происходить после того, как Angular полностью загрузит DOM. Обычно это выполняется в ngOnInit или ngAfterViewInit:
import { Component, AfterViewInit } from '@angular/core';
import * as AOS from 'aos';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements AfterViewInit {
ngAfterViewInit(): void {
AOS.init({
// Настройки по умолчанию
duration: 1200, // продолжительность анимации в миллисекундах
easing: 'ease-in-out', // тип анимации
once: true, // анимация срабатывает один раз
mirror: false // анимация повторяется при прокрутке вверх
});
}
}
Особенности использования в Angular:
*ngFor,
необходимо вызывать AOS.refresh() после изменения DOM:this.items.push(newItem);
AOS.refresh();
Каждому элементу, который должен анимироваться, добавляется атрибут
data-aos с типом анимации:
<div data-aos="fade-up">
Появляющийся блок
</div>
<div data-aos="zoom-in" data-aos-delay="300">
Блок с задержкой
</div>
Ключевые атрибуты:
data-aos: тип анимации (fade-up,
fade-down, zoom-in, flip-left и
др.).data-aos-duration: время анимации в миллисекундах.data-aos-delay: задержка перед запуском анимации.data-aos-offset: смещение триггера появления от верха
экрана.data-aos-easing: тип функции ускорения
(linear, ease-in, ease-out,
ease-in-out).data-aos-once: срабатывание анимации один раз или при
каждой прокрутке.В Angular проекты часто генерируют контент динамически. Для
корректного отображения анимаций необходимо после добавления элементов
вызывать метод AOS.refresh():
loadMoreItems() {
this.items.push(...newItems);
setTimeout(() => {
AOS.refresh();
}, 100);
}
Использование setTimeout помогает дать Angular время для
рендеринга новых элементов.
AOS позволяет настроить глобальные параметры и локальные для отдельных элементов:
AOS.init({
offset: 200, // смещение начала анимации
delay: 100, // задержка по умолчанию
duration: 800, // продолжительность
easing: 'ease-in-sine',
once: false,
mirror: true
});
Для отдельных блоков можно переопределять параметры через атрибуты:
<div data-aos="fade-right" data-aos-duration="1500" data-aos-delay="500">
Кастомная анимация
</div>
При использовании сторонних библиотек, которые динамически создают
DOM (например, Angular Material,
ng-bootstrap, PrimeNG), важно вызывать
AOS.refresh() после появления новых компонентов. Это
обеспечивает правильное вычисление позиции элементов на странице.
ngAfterViewChecked() {
AOS.refresh();
}
Использование ngAfterViewChecked подходит для сложных
страниц, но нужно учитывать производительность — частые вызовы могут
замедлить страницу.
Для страниц с большим количеством контента и ленивой загрузкой (lazy loading) рекомендуется инициализировать AOS после подгрузки каждого фрагмента:
onLazyLoadComplete() {
AOS.refresh();
}
Это гарантирует, что новые элементы корректно анимируются при прокрутке.
При использовании Angular Universal (SSR) необходимо
проверять наличие window, так как AOS использует DOM:
import { isPlatformBrowser } from '@angular/common';
import { PLATFORM_ID, Inject } from '@angular/core';
constructor(@Inject(PLATFORM_ID) private platformId: Object) {}
ngAfterViewInit() {
if (isPlatformBrowser(this.platformId)) {
AOS.init();
}
}
Это предотвращает ошибки при серверной сборке, где
window и document недоступны.
AOS.refresh() при динамическом
контенте.AOS.refresh().Такой подход обеспечивает стабильную работу анимаций на прокрутке в любых Angular-проектах.