Библиотека AOS (Animate on Scroll) предоставляет гибкий инструмент для реализации анимаций при скролле, но в ряде случаев может потребоваться условное отключение анимаций. Это особенно актуально для мобильных устройств, слабых по производительности или в ситуациях, когда анимации мешают пользовательскому опыту.
disableAOS поддерживает встроенную опцию
disable, которая позволяет программно
отключать анимации на основе определённых условий.
Синтаксис и примеры:
AOS.init({
disable: function() {
// Возвращает true — анимации отключаются
// Возвращает false — анимации остаются активными
// Отключение на мобильных устройствах
return window.innerWidth < 768;
},
duration: 1000,
once: true
});
window.innerWidth < 768 — типичное
условие для мобильных устройств.disable может использовать любые условия,
включая проверки браузера, платформы или пользовательских настроек.AOS.init({
disable: true // полностью отключает анимации
});
Вместо глобального отключения, иногда нужно отключить анимацию
только для конкретных блоков. Это реализуется с помощью
атрибута data-aos и CSS-классов:
<div data-aos="fade-up" data-aos-disable="true">
Контент без анимации
</div>
data-aos-disable позволяет
локально игнорировать анимацию.const element = document.querySelector('.no-animation');
if (window.innerWidth < 768) {
element.setAttribute('data-aos-disable', 'true');
} else {
element.removeAttribute('data-aos-disable');
}
Если условие меняется во время работы страницы (например, при изменении размера окна), анимации можно перезапускать:
function refreshAOS() {
if (window.innerWidth < 768) {
AOS.init({ disable: true });
} else {
AOS.init({ disable: false });
}
}
// Инициализация при загрузке страницы
refreshAOS();
// Обработка изменения размера окна
window.addEventListener('resize', refreshAOS);
AOS.refresh() обновляет позиции и размеры
элементов, но не изменяет глобальное условие отключения.AOS.refreshHard() полностью пересоздаёт анимации
и учитывает новые настройки disable.Можно создавать сложные условия, учитывающие несколько факторов:
AOS.init({
disable: function() {
const isMobile = window.innerWidth < 768;
const prefersReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
return isMobile || prefersReducedMotion;
},
duration: 800,
once: true
});
prefers-reduced-motion — медиа-запрос
для пользователей, которым необходимо минимальное движение
интерфейса.Иногда проще управлять отключением через CSS-классы, добавляемые в зависимости от условий:
.no-aos [data-aos] {
opacity: 1 !important;
transform: none !important;
}
if (window.innerWidth < 768) {
document.body.classList.add('no-aos');
} else {
document.body.classList.remove('no-aos');
}
data-aos будут отображаться без
анимаций.disable для
глобальных условий.data-aos-disable для
отдельных элементов.prefers-reduced-motion для соответствия
стандартам доступности.AOS.refreshHard() при динамических
изменениях интерфейса.Эти методы позволяют сделать работу с AOS гибкой, адаптивной и безопасной для производительности, сохраняя контроль над визуальными эффектами на разных устройствах и в разных условиях.