anime.js предоставляет гибкий инструмент для
создания интерактивных анимаций, которые запускаются и управляются в
ответ на события пользователя или системные триггеры. Важнейшей
концепцией является связывание анимации с событиями DOM, такими как
click, mouseover, scroll или
пользовательские события.
Для начала необходимо подключить библиотеку. Это можно сделать через CDN:
<script src="https://cdnjs.cloudflare.com/ajax/libs/animejs/3.2.1/anime.min.js"></script>
После подключения анимация создается с помощью функции
anime(). Ключевые параметры:
targets — элементы DOM или объекты, которые будут
анимироваться.translateX, translateY,
rotate, scale и другие — свойства
анимации.duration — продолжительность анимации в
миллисекундах.easing — функция плавности, например,
'linear', 'easeInOutQuad'.Пример базовой анимации:
anime({
targets: '.box',
translateX: 250,
duration: 1000,
easing: 'easeInOutQuad'
});
Эта анимация перемещает элемент с классом .box по оси X
на 250 пикселей за одну секунду.
Анимации часто должны запускаться только после взаимодействия
пользователя. Для этого используется стандартный синтаксис
addEventListener:
const box = document.querySelector('.box');
box.addEventListener('click', () => {
anime({
targets: box,
scale: 1.5,
duration: 500,
easing: 'easeOutElastic(1, .8)'
});
});
Здесь анимация увеличивает элемент при клике. Использование событий позволяет создавать интерактивные интерфейсы без постоянного проигрывания анимаций.
Hover-анимации требуют аккуратного управления состоянием, чтобы анимация возвращалась в исходное положение:
box.addEventListener('mouseenter', () => {
anime({
targets: box,
scale: 1.2,
duration: 300,
easing: 'easeOutQuad'
});
});
box.addEventListener('mouseleave', () => {
anime({
targets: box,
scale: 1,
duration: 300,
easing: 'easeOutQuad'
});
});
Использование отдельных обработчиков для mouseenter и
mouseleave обеспечивает плавное появление и исчезновение
эффекта.
Anime.js поддерживает анимацию не только на стандартные DOM-события,
но и на кастомные события, которые можно вызвать программно через
dispatchEvent:
const event = new CustomEvent('animateBox');
document.querySelector('.box').addEventListener('animateBox', () => {
anime({
targets: '.box',
rotate: 360,
duration: 1000,
easing: 'easeInOutSine'
});
});
// Вызов события
document.querySelector('.box').dispatchEvent(event);
Такой подход позволяет запускать анимации на события, созданные скриптами или другими библиотеками, создавая модульную архитектуру интерфейсов.
Анимации можно привязывать к прокрутке страницы. Для этого необходимо
слушать событие scroll и управлять свойством
progress или seek анимации:
const scrollAnim = anime({
targets: '.box',
translateY: 300,
duration: 1000,
easing: 'linear',
autoplay: false
});
window.addEventListener('scroll', () => {
const scrollFraction = window.scrollY / (document.body.scrollHeight - window.innerHeight);
scrollAnim.seek(scrollAnim.duration * scrollFraction);
});
seek() позволяет мгновенно устанавливать прогресс
анимации в зависимости от положения скролла, что удобно для
«параллакс»-эффектов и визуализации прокрутки.
Обычно элементы реагируют на несколько типов взаимодействий. В anime.js можно комбинировать события, создавая сложные цепочки анимаций:
const btn = document.querySelector('.btn');
btn.addEventListener('mouseenter', () => anime({
targets: btn,
scale: 1.1,
duration: 200
}));
btn.addEventListener('mouseleave', () => anime({
targets: btn,
scale: 1,
duration: 200
}));
btn.addEventListener('click', () => anime({
targets: btn,
rotate: 180,
duration: 500,
easing: 'easeInOutCubic'
}));
Каждое событие управляет своим аспектом анимации, создавая комплексное поведение без конфликтов.
Библиотека предоставляет встроенные коллбэки, которые удобно использовать при привязке анимаций к событиям:
begin — вызывается при старте анимации.update — вызывается на каждом кадре анимации.complete — вызывается при завершении.Пример использования:
anime({
targets: '.box',
translateX: 300,
duration: 800,
easing: 'easeInOutQuad',
begin: () => console.log('Анимация началась'),
complete: () => console.log('Анимация завершена')
});
Коллбэки позволяют выполнять дополнительные действия синхронно с анимацией, например запуск аудиоэффектов или изменение других элементов DOM.
Для сложных анимаций лучше использовать
anime.timeline(), который позволяет объединять несколько
анимаций в последовательность:
const tl = anime.timeline({
autoplay: false
});
tl.add({
targets: '.box',
translateX: 200,
duration: 500,
easing: 'easeInOutQuad'
})
.add({
targets: '.box',
rotate: 90,
duration: 400,
easing: 'easeInOutQuad'
});
document.querySelector('.box').addEventListener('click', () => tl.play());
Timeline позволяет комбинировать последовательные и параллельные эффекты, обеспечивая точное управление анимацией в ответ на события.
Anime.js поддерживает вычисляемые значения через функции, что полезно при привязке анимации к событиям с переменными параметрами:
box.addEventListener('click', (e) => {
anime({
targets: box,
translateX: () => e.clientX,
translateY: () => e.clientY,
duration: 600,
easing: 'easeOutExpo'
});
});
В этом примере анимация смещает элемент к позиции курсора, обеспечивая динамическое и отзывчивое поведение интерфейса.
Anime.js обеспечивает полное управление анимацией через события, коллбэки, таймлайны и динамические свойства, позволяя создавать интерактивные и живые веб-интерфейсы с минимальным количеством кода.