Библиотека AOS (Animate on Scroll) предоставляет гибкий механизм для запуска анимаций при прокрутке страницы. Одной из ключевых возможностей является адаптация поведения анимаций под различные устройства и размеры экрана. Это позволяет создавать пользовательский интерфейс, который выглядит естественно и гармонично на мобильных устройствах, планшетах и десктопах.
Для изменения анимаций в зависимости от ширины экрана можно
использовать CSS медиазапросы в сочетании с атрибутами
data-aos. Например, для скрытия анимации на малых
экранах:
@media (max-width: 768px) {
[data-aos] {
opacity: 1 !important;
transform: none !important;
}
}
Здесь мы полностью отключаем анимацию для экранов меньше 768 пикселей, сохраняя содержимое видимым. Такой подход эффективен, когда на мобильных устройствах важнее скорость загрузки и минимальная нагрузка на производительность.
Библиотека AOS позволяет инициализировать анимации с параметрами конфигурации, которые можно менять в зависимости от размеров экрана. Например:
let aosSettings;
if (window.innerWidth < 768) {
aosSettings = {
duration: 500,
offset: 50,
once: true,
disable: true
};
} else if (window.innerWidth < 1200) {
aosSettings = {
duration: 800,
offset: 100,
once: true
};
} else {
aosSettings = {
duration: 1200,
offset: 150,
once: false
};
}
AOS.init(aosSettings);
Ключевые моменты:
duration — время анимации в миллисекундах. На больших
экранах обычно используют более плавные анимации, а на мобильных —
короткие.offset — смещение запуска анимации относительно видимой
области. На больших экранах элементы могут появляться позже, создавая
эффект последовательного появления.once — анимация срабатывает только один раз или при
каждой прокрутке.disable — полное отключение анимации на определённых
устройствах.data-aos для разных экрановПомимо глобальных настроек, можно управлять поведением отдельных элементов с помощью динамического изменения атрибутов. Например:
const elements = document.querySelectorAll('[data-aos]');
elements.forEach(el => {
if (window.innerWidth < 768) {
el.setAttribute('data-aos', 'fade');
el.setAttribute('data-aos-duration', '400');
} else {
el.setAttribute('data-aos', 'fade-up');
el.setAttribute('data-aos-duration', '1000');
}
});
Такой подход позволяет назначать разные виды анимаций для мобильных и десктопных версий без дублирования HTML-кода.
Для динамических интерфейсов важно реагировать на изменение ширины экрана после загрузки страницы:
window.addEventListener('resize', () => {
AOS.refresh();
});
AOS.refresh() пересчитывает позиции элементов и
повторно применяет анимации.data-aos
для полного контроля над адаптивной анимацией.disable с медиазапросамиИногда необходимо полностью отключать анимации на определённых
устройствах для улучшения производительности. Для этого AOS поддерживает
функцию disable с колбэком:
AOS.init({
disable: function() {
return window.innerWidth < 768;
}
});
Преимущество такого подхода в том, что анимации не просто скрываются через CSS, а библиотека не инициирует их вовсе, экономя ресурсы устройства.
Для больших экранов часто используют эффект последовательного
появления блоков. Это достигается через data-aos-delay:
<div data-aos="fade-up" data-aos-delay="0">Элемент 1</div>
<div data-aos="fade-up" data-aos-delay="200">Элемент 2</div>
<div data-aos="fade-up" data-aos-delay="400">Элемент 3</div>
В комбинации с медиазапросами можно динамически менять задержку:
elements.forEach((el, index) => {
if (window.innerWidth >= 1200) {
el.setAttribute('data-aos-delay', index * 300);
} else {
el.setAttribute('data-aos-delay', '0');
}
});
Такой подход делает анимации более выразительными на больших экранах, сохраняя простоту на мобильных.
once: true для элементов, которые не
требуют повторного появления при прокрутке.Эти техники позволяют создавать интерфейсы, где анимации AOS гармонично подстраиваются под любые устройства, обеспечивая плавность, производительность и визуальную привлекательность.