Advertisement
  1. Code
  2. JavaScript

Анимации На Основе JavaScript С Использованием Anime.js, Часть 2: Параметры

Scroll to top
Read Time: 7 min
This post is part of a series called JavaScript-Based Animations Using Anime.js.
JavaScript-Based Animations Using Anime.js, Part 1: Targets and Properties
JavaScript-Based Animations Using Anime.js, Part 3: Values, Timeline, and Playback

Russian (Pусский) translation by Anna Goorikova (you can also view the original English article)

В первом уроке серии Anime.js, вы узнали о различных способах определения целевых элементов, которые вы хотите анимировать и виды свойств CSS и атрибутов DOM, которые могут быть анимированы. Анимации в предыдущем уроке были очень простыми. Все целевые элементы просто двигались на определенное расстояние или изменяли радиус границы с фиксированной скоростью.

Иногда может потребоваться более ритмичная анимация элементов. Например, у вас может быть десять различных элементов, которые вы хотите переместить слева направо с задержкой в 500 мс между началом анимации для каждого элемента. Аналогичным образом можно увеличить или уменьшить длительность анимации для каждого элемента в зависимости от его положения.

В этом уроке вы узнаете, как использовать Anime.js для правильного времени анимации различных элементов с использованием определенных параметров. Это позволит вам контролировать порядок, в котором воспроизводится последовательность анимации для отдельных элементов или всех элементов.

Параметры свойства

Эти параметры позволяют вам контролировать длительность, задержку и затухание отдельных свойств или группу свойств одновременно. Параметры duration и delay задаются в миллисекундах. Значение по умолчанию для длительности составляет 1000 мс или 1 с.

Это означает, что если не указано иное, любая анимация, применяемая к элементу, будет воспроизводиться в течение 1 секунды. Параметр delay указывает время, в течение которого анимация начинается, как только вы ее уже активировали. Значение по умолчанию для задержки равно 0. Это означает, что анимация начнется сразу же после ее запуска.

Вы можете использовать параметр easing для управления скоростью, с которой воспроизводится анимация, в течение продолжительности ее активности. Некоторые анимации начинаются медленно, поднимают темп посередине, а затем замедляются в конце. Другие начинают с хорошими темпами, а затем замедляются до конца.

Однако во всех случаях анимация всегда завершается в течение времени, указанного с использованием параметра duration . Anime.js предоставляет множество функций затухания, которые вы можете применять к своим элементам напрямую, только используя их имена. Для некоторых функций затухания вы также можете установить значение параметра elasticity для управления тем, насколько значение элемента отскакивает назад и вперед, как пружина.

Вы узнаете больше о различных функциях затухания в заключительном уроке серии. В следующем фрагменте кода показано, как применить все эти параметры к различным анимациям.

1
var slowAnimation = anime({
2
  targets: '.square',
3
  translateY: 250,
4
  borderRadius: 50,
5
  duration: 4000
6
});
7
8
var delayAnimation = anime({
9
  targets: '.square',
10
  translateY: 250,
11
  borderRadius: 50,
12
  delay: 800
13
});
14
15
var cubicAnimation = anime({
16
  targets: '.square',
17
  translateY: 250,
18
  borderRadius: 50,
19
  duration: 1200,
20
  easing: 'easeInOutCubic'
21
});

Как вы можете видеть, эти параметры могут использоваться независимо от других параметров или в сочетании с ними. У cubicAnimation есть параметр duration и easing, применяемый к нему. Если продолжительность не указана, анимация будет работать в течение 1 секунды. Теперь она будет работать в течение 1200 миллисекунд или 1,2 секунды.

Одним из основных ограничений параметров свойств в приведенном выше примере было то, что все анимации целевого элемента будут иметь одинаковые значения duration, delay и easing.

Это может быть или не быть желаемым поведением. Например, вместо одновременного перевода и изменения радиуса границы целевого элемента вы можете сначала перенести целевой элемент, а затем анимировать его радиус границы. Anime.js позволяет указать различные значения параметров duration, delay, easing и elasticity для отдельных свойств. Следующий код и демонстрация должны сделать его более ясным.

1
var indiParam = anime({
2
  targets: '.square',
3
  translateY: {
4
    value: 250
5
  },
6
  rotate: {
7
    value: '2.125turn'
8
  },
9
  backgroundColor: {
10
    value: 'rgb(255,0,0)',
11
    duration: 400,
12
    delay: 1500,
13
    easing: 'linear'
14
  },
15
  duration: 1500
16
});

В приведенном выше коде все свойства, которые мы хотим анимировать, имеют разные значения. Фоновая цветная анимация имеет продолжительность 400 мс, в то время как анимация вращения и трансляции использует значение глобальной продолжительности 1500 мс.

Фоновая цветная анимация также имеет задержку, поэтому любое изменение цвета начинается только после того, как прошло 1500 мс. Свойства rotate и translateY используют значение по умолчанию для параметров delay и easing, потому что мы не предоставили для них ни локальное, ни глобальное значение.

Функциональные параметры

Параметры на основе свойств полезны, когда вы хотите изменить порядок и продолжительность анимации отдельных свойств. Тем не менее, duration и delay будут по-прежнему применяться для отдельных свойств для всех целевых элементов. Параметры на основе функций позволяют компактно задавать duration, delay, elasticity и easing для различных целевых элементов отдельно.

В этом случае вы устанавливаете значения разных параметров, используя функции вместо цифр. Эти функции принимают три параметра: target, index и targetCount. Параметр target сохраняет ссылку на текущий целевой элемент. Параметр index хранит индекс или позицию текущего целевого элемента. Параметр targetCount сохраняет общее количество целевых элементов.

Параметр target полезен, когда значения анимации должны быть установлены на основе некоторых атрибутов целевого элемента. Например, вы можете сохранить значения delay, duration или easing для целевого элемента в атрибутах данных, а затем получить к ним доступ позже.

Аналогично, вы можете получить доступ к цвету фона целевого элемента, а затем манипулировать им, чтобы установить окончательное уникальное значение цвета для отдельных элементов. Таким образом, вы можете анимировать все элементы, чтобы получить цвет фона, который на 20% темнее, чем их текущий цвет.

Параметр index дает вам позицию текущей цели в нашем списке целевых элементов. Вы можете использовать его для постепенного изменения значения параметров, таких как duration и delay для разных элементов.

Это обычно полезно, если вы хотите установить значения в порядке возрастания. Вы также можете вычесть index из targetCount для установки значений в порядке убывания. Следующий фрагмент кода использует оба этих параметра для указания значений в порядке возрастания и убывания.

1
var delaySequence = anime({
2
  targets: '.square',
3
  translateY: 250,
4
  delay: function(target, index) {
5
    return index * 200;
6
  }
7
});
8
9
var delaySequenceR = anime({
10
  targets: '.square',
11
  translateY: 250,
12
  delay: function(target, index, targetCount) {
13
    return (targetCount - index) * 200;
14
  }
15
});

Следующий код устанавливает другое значение easing для каждого целевого элемента, используя параметр index.

1
var easeInValues = ['easeInQuad', 'easeInCubic', 'easeInQuart', 'easeInQuint', 'easeInSine', 'easeInExpo', 'easeInCirc', 'easeInBack', 'easeInElastic'];
2
3
var easeInSequence = anime({
4
  targets: '.square',
5
  translateY: 250,
6
  duration: 2000,
7
  easing: function(target, index) {
8
    return easeInValues[index];
9
  },
10
  autoplay: false
11
});

Параметры анимации

Этот последний набор параметров позволяет указать количество раз, когда должна воспроизводиться анимация, и направление, в котором она должна воспроизводиться. Вы можете указать количество раз, которое анимация должна воспроизводиться используя параметр loop. Существует также параметр autoplay, который может быть установлен в true или false. Его значение по умолчанию - true, но вы можете остановить анимацию от запуска самостоятельно, установив ее в значение false.

Параметр direction определяет направление воспроизведения анимации. Он может иметь три значения: normal, reverse и alternate. Значение по умолчанию равно normal, что обеспечивает нормальное воспроизведение анимации с начальных значений до конечных значений. Когда целевые элементы достигнут финишного значения, если значение loop больше 1, целевые элементы возвращаются к начальным значениям, а затем снова начинают анимацию.

Когда для параметра direction установлено значение reverse, а значение loop больше 1, анимация меняет направление. Другими словами, целевые элементы запускают анимацию из своего конечного состояния и идут назад, чтобы достичь начального состояния. Когда они находятся в исходном состоянии, элементы возвращаются в конечное состояние, а затем снова запускают обратную анимацию. Значение направления alternate изменяет направление анимации после каждого цикла.

1
var normalLoop = anime({
2
  targets: '.square',
3
  translateY: 250,
4
  delay: function(target, index) {
5
    return index * 200;
6
  },
7
  loop: 4,
8
  easing: 'easeInSine',
9
  autoplay: false
10
});

В следующей демонстрации я установил число циклов равным четырем, чтобы вы могли легко заметить разницу в анимации элементов в разных режимах.

Заключительные мысли

В этом уроке вы узнали о различных параметрах, которые можно использовать для управления анимацией целевых элементов в Anime.js. Параметры свойств используются для управления анимацией отдельных свойств.

Вы можете использовать их для управления последовательностью, в которой анимация воспроизводится для отдельных элементов. Параметры функции позволяют вам контролировать время и скорость анимации для отдельных элементов по отношению ко всей группе. Параметры анимации позволяют вам контролировать, то как сама анимация воспроизводится для разных элементов.

Если у вас есть какие-либо вопросы, связанные с этим учебным курсом, пожалуйста, напишите мне об этом в комментариях.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.