Библиотека mo.js предоставляет широкий набор
параметров трансформации, позволяющих управлять положением, масштабом,
поворотом и деформацией анимируемых объектов. Эти параметры применяются
к любому Shape, Html или другим анимируемым
сущностям и являются ключевыми для создания динамичных визуальных
эффектов.
Все трансформации в mo.js основаны на интерполяции значений во времени — от начального состояния к конечному, с возможностью задания сложных кривых изменения.
x и yОсновные параметры перемещения:
x: 100,
y: 50
x — смещение по горизонталиy — смещение по вертикалиЗначения могут быть:
100)'100px', '50%'){ 0: 100 })x: { 0: 200 },
y: { 100: 0 }
Такая запись означает:
x: от 0 до 200y: от 100 до 0x: '+=50',
y: '-=20'
+= — увеличение относительно текущего положения-= — уменьшениеscalescale: 2
1 — исходный размерscale: { 0: 1.5 }
Элемент увеличится с 0 до 1.5.
scaleX, scaleYscaleX: { 1: 2 },
scaleY: { 1: 0.5 }
Позволяет:
rotaterotate: 45
rotate: { 0: 360 }
Полный оборот.
rotate: '+=90'
Добавляет 90 градусов к текущему значению.
skewX и
skewYskewX: 30,
skewY: 10
skewX: { 0: 45 }
Создает эффект «наклоняющегося» элемента.
originorigin: '50% 50%'
Определяет точку, относительно которой применяются трансформации.
Примеры:
'0% 0%' — левый верхний угол'100% 100%' — правый нижний'50% 50%' — центрorigin: { '0% 0%': '100% 100%' }
Позволяет анимировать точку трансформации.
new mojs.Shape({
x: { 0: 200 },
y: { 0: 100 },
scale: { 0.5: 1.5 },
rotate: { 0: 180 }
});
Одновременно происходит:
Каждое свойство может иметь собственную функцию изменения:
x: { 0: 200, easing: 'cubic.out' },
scale: { 1: 2, easing: 'elastic.out' }
Популярные easing:
linearquad.incubic.outelastic.outbounce.outx: {
0: 200,
easing: function (p) {
return Math.sin(p * Math.PI);
}
}
Позволяет создавать произвольные кривые.
scale: {
0: 0,
50: 1.5,
100: 1
}
Позволяет задавать промежуточные состояния.
mo.js в основном ориентирован на 2D, но можно использовать CSS-свойства:
transform: 'rotateX(45deg) rotateY(30deg)'
Однако:
onUpdateonUpdate(progress) {
const value = progress * 100;
this.el.style.transform = `translateX(${value}px) rotate(${value}deg)`;
}
Позволяет:
Наиболее производительные:
transformopacitymo.js автоматически использует transform, что:
scale: { 0: 1 },
opacity: { 0: 1 }
y: { 0: -200 },
rotate: { 0: 90 },
scale: { 0.5: 1 }
scale: { 1: 1.3 },
repeat: 999,
yoyo: true
Важно учитывать:
mo.js управляет этим автоматически через единый
transform-стек.
transform строкой (кроме
onUpdate)Позволяет двигать объект по траектории, комбинируя:
xyrotateconst timeline = new mojs.Timeline();
timeline.add(
shape1,
shape2
);
Трансформации синхронизируются между объектами.
onUpdate и кастомные функции