Steps-анимация — это тип временной функции
(easing) в anime.js, который разбивает анимацию на
дискретные шаги. В отличие от линейной или плавной кривой Безье, steps
создает резкое, «кубиковое» изменение значений, идеально подходящее для
имитации кадровых анимаций, анимации спрайтов или переключения классов
по шагам.
В anime.js steps задаются с помощью строки 'steps(N)',
где N — количество шагов. Каждый шаг соответствует
промежутку, на котором значение свойства сохраняется до следующего
изменения.
Пример базового использования:
anime({
targets: '.box',
translateX: 300,
duration: 2000,
easing: 'steps(5)'
});
В этом примере элемент .box перемещается по оси X на 300
пикселей, но движение разбито на 5 резких шагов, вместо
плавного перемещения.
Формат функции easing для steps:
'easing: steps(N, direction)'
N — количество шагов.
direction — необязательный параметр, который может принимать значения:
'start' — изменение происходит в начале шага.'end' — изменение происходит в конце шага (значение по
умолчанию).Пример использования с start:
anime({
targets: '.box',
translateY: 200,
duration: 2000,
easing: 'steps(4, start)'
});
В этом случае элемент мгновенно прыгает на новый уровень в начале каждого шага, создавая ощущение ускоренного старта.
Steps-анимация особенно полезна для анимации спрайтов, где необходимо менять позицию фона элемента по кадрам.
Пример:
anime({
targets: '.sprite',
backgroundPositionX: ['0px', '-512px'],
duration: 1000,
easing: 'steps(8)',
loop: true
});
Здесь фон .sprite смещается по горизонтали на 512
пикселей, разделенных на 8 шагов, что соответствует 8
кадрам спрайта. Плавного перехода между кадрами нет — каждый кадр
появляется мгновенно.
Steps можно использовать не только для перемещения, но и для любых числовых свойств: opacity, scale, rotate, color.
Пример анимации прозрачности с дискретными шагами:
anime({
targets: '.circle',
opacity: [0, 1],
duration: 1200,
easing: 'steps(6)',
loop: true
});
Элемент .circle появляется и исчезает резкими шагами,
создавая эффект мигания.
Для комбинирования с плавными анимациями можно использовать несколько
анимационных объектов или timeline:
let tl = anime.timeline({ loop: true });
tl.add({
targets: '.box',
translateX: 300,
duration: 1000,
easing: 'linear'
})
.add({
targets: '.box',
translateY: 200,
duration: 1000,
easing: 'steps(4)'
});
Первый сегмент перемещает элемент плавно по X, второй — дискретно по Y.
Количество шагов в steps-анимации часто привязывается к частоте кадров:
steps(24).steps(8).Такой подход позволяет точно воспроизвести кадровую анимацию, характерную для классических мультфильмов и игр.
timeline, loop,
direction: 'alternate'.start/end) влияет на визуальное восприятие:
начало шага или конец шага создают разные эффекты динамики.