AOS (Animate on Scroll) обеспечивает удобное включение анимаций при прокрутке страницы, но его возможности ограничены набором встроенных эффектов и простыми триггерами. Для создания более гибких и сложных анимаций используется GSAP (GreenSock Animation Platform). Совмещение AOS и GSAP позволяет синхронизировать скролл-триггеры с мощными таймлайнами, кастомными easing-функциями и контролем последовательности анимаций.
Разделение ролей:
Использование data-aos как
триггера: Можно оставить стандартные атрибуты
data-aos на элементах, чтобы AOS генерировал событие
появления элемента в области видимости, а затем запускать GSAP-анимацию
через события AOS:
AOS.init({
once: true, // анимация срабатывает только один раз
mirror: false
});
document.querySelectorAll('[data-aos]').forEach(el => {
el.addEventListener('aos:in', ({ detail }) => {
gsap.fromTo(el,
{ opacity: 0, y: 50 },
{ opacity: 1, y: 0, duration: 1, ease: "power3.out" }
);
});
});
Здесь событие aos:in используется как точка запуска для
GSAP, что позволяет точно синхронизировать анимацию с появлением
элемента на экране.
GSAP позволяет объединять несколько анимаций в Timeline, а AOS выступает инициатором:
const tl = gsap.timeline({ paused: true });
tl.to('.box1', { x: 100, duration: 0.5 })
.to('.box2', { scale: 1.5, duration: 0.7 }, "-=0.3")
.to('.box3', { rotation: 360, duration: 1 });
document.querySelector('.trigger').addEventListener('aos:in', () => {
tl.play();
});
Преимущества такого подхода:
GSAP предлагает собственный плагин ScrollTrigger, который позволяет синхронизировать анимации с положением скролла. AOS можно использовать для легких эффектов или быстрого прототипирования, а ScrollTrigger — для более детальной анимации:
gsap.registerPlugin(ScrollTrigger);
gsap.to('.section', {
y: -100,
opacity: 0,
scrollTrigger: {
trigger: '.section',
start: 'top 80%',
end: 'bottom 20%',
scrub: true,
}
});
Использование AOS и ScrollTrigger одновременно требует внимательного управления триггерами, чтобы эффекты не дублировались. Часто комбинируют AOS только для инициализации элемента, а все сложные скролл-анимации полностью передаются в GSAP.
AOS поддерживает параметр once: false, позволяющий
анимации срабатывать каждый раз, когда элемент появляется на экране.
GSAP-анимации можно привязать к этим событиям:
AOS.init({ once: false });
document.querySelectorAll('[data-aos]').forEach(el => {
el.addEventListener('aos:in', () => {
gsap.fromTo(el, { y: 50, opacity: 0 }, { y: 0, opacity: 1, duration: 0.6 });
});
el.addEventListener('aos:out', () => {
gsap.to(el, { y: -50, opacity: 0, duration: 0.6 });
});
});
Такой подход позволяет создавать интерактивные скролл-анимации, которые реагируют на возврат пользователя к элементу, обеспечивая динамическое поведение страницы.
once: true для элементов, которые не
требуют повторного воспроизведения, чтобы снизить нагрузку.Совместное использование AOS и GSAP позволяет достичь гибкости и выразительности, объединяя простоту триггеров AOS с мощью и контролем таймлайнов GSAP, что критично для современных интерактивных веб-интерфейсов.