В библиотеке anime.js анимации строятся вокруг изменения значений свойств объектов во времени. Эти свойства могут быть числовыми, строковыми или массивами. При работе с числами важно понимать, как библиотека интерпретирует начальные и конечные значения, а также как применяются математические операции для создания динамических эффектов.
Простейшая анимация числа задается через объект targets
и свойства value:
anime({
targets: { x: 0 },
x: 100,
duration: 2000,
easing: 'linear',
update: function(anim) {
console.log(anim.animatables[0].target.x);
}
});
В этом примере объект { x: 0 } изменяет своё свойство
x от 0 до 100 за 2 секунды. Важный момент —
аниме.js автоматически вычисляет интерполяцию значений
между начальным и конечным, используя выбранную функцию
easing.
Одной из мощных возможностей anime.js является использование относительных значений, которые позволяют задавать динамику без точного указания конечного числа.
Примеры относительных выражений:
'+=50' — увеличить текущее значение на 50'-=30' — уменьшить текущее значение на 30anime({
targets: { x: 0 },
x: '+=50',
duration: 1000
});
В этом случае начальное значение x = 0 увеличится на 50.
Относительные значения особенно полезны для создания
последовательных или цикличных анимаций, где конечное положение
зависит от текущего состояния объекта.
Кроме относительных значений, anime.js поддерживает математические операции прямо в виде строк. Это расширяет возможности анимации, позволяя создавать динамические, непредсказуемые эффекты.
Примеры:
anime({
targets: { x: 0 },
x: function(el, i, t) {
return i * 100 + 50;
},
duration: 1500
});
el — текущий элемент в массиве целейi — индекс элементаt — общее количество целейФункция возвращает значение, которое будет интерполировано от текущего состояния. Можно комбинировать с арифметикой:
anime({
targets: '.box',
translateX: function(el, i) {
return 50 + i * 30;
},
duration: 2000
});
Здесь каждая коробка смещается на уникальное расстояние, вычисленное как базовое смещение плюс индекс, умноженный на шаг.
Функции в качестве конечного значения открывают доступ к сложной математике:
anime({
targets: { x: 0 },
x: function() {
return Math.sin(Date.now() / 500) * 100;
},
duration: 3000,
loop: true
});
Использование Math.sin, Math.cos, Math.random и других встроенных функций позволяет создавать эффект пульсации, дрожания или случайных движений.
Ключевой момент — anime.js на каждом кадре вычисляет текущее значение свойства через интерполяцию, поэтому динамические функции могут комбинироваться с easing для плавности.
Можно анимировать одновременно несколько числовых свойств, используя массивы или объекты:
anime({
targets: '.circle',
translateX: [
{ value: 100, duration: 1000 },
{ value: 0, duration: 1000 }
],
scale: [
{ value: 1.5, duration: 500 },
{ value: 1, duration: 500 }
],
loop: true
});
Преимущество такого подхода — каждая анимация может иметь собственную функцию easing, временные параметры и математические выражения для расчета промежуточных значений.
Anime.js корректно работает с дробными числами, автоматически поддерживая интерполяцию:
anime({
targets: { opacity: 0 },
opacity: 0.75,
duration: 1200
});
Это особенно важно при работе с графикой и CSS-свойствами, такими как
opacity, scale или rotate, где
точность до десятых долей влияет на визуальный результат.
+=,
-=) позволяют строить динамику относительно текущего
состояния.Математические операции в anime.js — это не просто числа. Это мощный инструмент для создания динамичных, гибких и интерактивных анимаций, где каждое значение может быть рассчитано на лету и адаптировано под конкретный сценарий.