В anime.js направление анимации управляется через
несколько ключевых свойств и методов, которые задают последовательность
и траекторию изменений объектов. Основное управление направлением
происходит через свойства direction, loop и
reverse.
directionСвойство direction определяет, в каком порядке будут
выполняться анимации:
normal – анимация проходит от
начального состояния к конечному один раз.
anime({
targets: '.box',
translateX: 250,
duration: 1000,
direction: 'normal'
});reverse – анимация выполняется в
обратном порядке, от конечного состояния к начальному.
anime({
targets: '.box',
translateX: 250,
duration: 1000,
direction: 'reverse'
});alternate – чередует прямое и
обратное движение на каждой итерации.
anime({
targets: '.box',
translateX: 250,
duration: 1000,
direction: 'alternate',
loop: true
});alternate-reverse – сначала
выполняется обратное движение, затем прямое, чередуется на каждой
итерации.
anime({
targets: '.box',
translateX: 250,
duration: 1000,
direction: 'alternate-reverse',
loop: true
});Ключевой момент: direction особенно
полезно при использовании совместно с loop, создавая
бесконечные циклы движения.
reverse()Для динамического изменения направления анимации в процессе
выполнения используется метод .reverse(). Этот метод меняет
текущую траекторию на противоположную.
const animation = anime({
targets: '.box',
translateX: 300,
duration: 2000
});
setTimeout(() => {
animation.reverse(); // направление меняется на обратное
animation.play();
}, 1000);
Особенность: .reverse() не меняет
начальные и конечные значения, оно инвертирует текущее направление
анимации, сохраняя прогресс.
keyframes)При использовании ключевых кадров направление движения может управляться более тонко. Для этого задаются массивы объектов с конкретными значениями свойств, которые анимируются последовательно:
anime({
targets: '.box',
keyframes: [
{ translateX: 0 },
{ translateX: 100 },
{ translateX: 50 },
{ translateX: 150 }
],
duration: 4000,
easing: 'easeInOutQuad',
direction: 'alternate'
});
Примечание: при direction: 'alternate'
последовательность keyframes автоматически выполняется в обратном
порядке после завершения первого цикла.
Для плавного управления направлением анимации применяются easing функции. Они позволяют задавать ускорение и замедление по конкретной оси движения, что создаёт визуальный эффект изменения траектории:
anime({
targets: '.box',
translateX: 200,
translateY: 100,
duration: 1500,
easing: 'easeInOutSine',
direction: 'alternate',
loop: true
});
Разделение осей (translateX, translateY)
позволяет создавать диагональные и сложные траектории. Ключевой
момент: easing работает отдельно для каждой оси, что даёт
полный контроль над направлением движения.
Направление может комбинироваться с последовательной анимацией нескольких объектов через timeline:
const tl = anime.timeline({
direction: 'alternate',
loop: true
});
tl.add({
targets: '.box1',
translateX: 200,
duration: 1000
})
.add({
targets: '.box2',
translateY: 100,
duration: 1000
});
Особенности timeline:
direction timeline.offset позволяет задавать задержку запуска отдельных
анимаций относительно общей последовательности.play(), pause(),
reverse() можно применять к всей последовательности.Свойства translateX, translateY и другие
можно задавать как функции для изменения направления в зависимости от
индекса или текущего состояния:
anime({
targets: '.box',
translateX: function(el, i) {
return i % 2 === 0 ? 200 : -200;
},
duration: 1000,
direction: 'alternate',
loop: true
});
Эффект: чередование направлений для разных элементов создаёт ощущение более живой анимации.
progress и seekДля точного контроля направления и позиции анимации применяются
методы seek() и свойство progress:
const animation = anime({
targets: '.box',
translateX: 300,
duration: 2000,
autoplay: false
});
animation.seek(1500); // перемещает анимацию к 1500 мс
animation.reverse(); // меняет направление с текущего момента
animation.play();
Применение: полезно для интерактивных анимаций, где направление зависит от действий пользователя (например, скролл, свайп, клик).