В anime.js для задания анимаций можно использовать относительные значения, которые позволяют управлять изменением свойств не через абсолютные значения, а через смещение относительно текущего состояния элемента. Это особенно полезно при создании динамических анимаций, где начальное состояние может меняться, либо когда нужно строить цепочку последовательных эффектов.
Относительные значения задаются с помощью строк с математическими операторами:
anime({
targets: '.box',
translateX: '+=250px', // увеличение значения на 250px относительно текущего
translateY: '-=100px', // уменьшение значения на 100px
duration: 1000
});
+=value — добавление к текущему значению-=value — вычитание из текущего значения*= и /= — умножение или деление текущего
значения (редко используется, но поддерживается)Такие выражения работают со всеми числовыми свойствами, которые
поддерживаются в CSS и JavaScript, включая translateX,
translateY, scale, rotate,
opacity и т.д.
translate, scale, rotate и другие transform-свойства отлично подходят для относительных изменений:
anime({
targets: '.circle',
translateX: '+=100px',
translateY: '+=50px',
scale: '+=0.5',
rotate: '+=45deg',
duration: 1500,
easing: 'easeInOutQuad'
});
Здесь элемент с классом .circle сдвинется на 100px по X,
50px по Y, увеличится в 1.5 раза и повернется на 45 градусов
относительно текущего состояния.
Когда анимация построена на ключевых кадрах, использование относительных значений позволяет создавать более гибкие и повторяемые эффекты:
anime({
targets: '.square',
keyframes: [
{ translateX: '+=50px', rotate: '+=15deg' },
{ translateX: '+=50px', rotate: '+=15deg' },
{ translateX: '+=50px', rotate: '+=15deg' }
],
duration: 1200,
easing: 'easeInOutSine'
});
Каждый кадр анимации добавляет изменения к предыдущему состоянию элемента, что позволяет легко строить последовательные движения без расчета абсолютных координат.
Относительные значения можно комбинировать с функциями, которые вычисляют конечное значение на основе текущего состояния или индекса элемента:
anime({
targets: '.dot',
translateX: el => '+=' + (10 * el.dataset.index) + 'px',
translateY: el => '-=' + (5 * el.dataset.index) + 'px',
duration: 800,
easing: 'easeOutCubic'
});
Функции возвращают строку с относительным значением
('+=' или '-='), позволяя строить динамические
и кастомные эффекты для нескольких элементов одновременно.
В одной анимации можно комбинировать относительные и абсолютные значения:
anime({
targets: '.line',
translateX: '+=50px',
translateY: 200, // абсолютное значение
scale: '+=0.3',
duration: 1000
});
Относительные значения применяются к текущему состоянию элемента, а абсолютные — устанавливают конкретное конечное значение, что обеспечивает гибкость в управлении сложными анимациями.
px,
deg, %) при использовании относительных
значений для transform-свойств.opacity относительные значения можно
задавать без единиц (+=0.2).timeline относительные значения
позволяют строить эффекты без постоянного пересчета начальных
координат.loop и
direction: 'alternate', создавая плавные циклические
движения.const tl = anime.timeline({
easing: 'easeInOutQuad',
duration: 500
});
tl.add({
targets: '.ball',
translateX: '+=100px',
scale: '+=0.2'
})
.add({
targets: '.ball',
translateY: '+=50px',
rotate: '+=30deg'
})
.add({
targets: '.ball',
translateX: '-=50px',
scale: '-=0.2'
});
В этом примере каждая следующая анимация использует относительные значения, что позволяет элементу плавно двигаться и изменять размеры без необходимости вручную рассчитывать абсолютные координаты и параметры transform.