В библиотеке mo.js вся анимация строится вокруг
конфигурационных объектов — декларативных описаний поведения, внешнего
вида и динамики анимируемых сущностей. Конфигурационный объект
представляет собой обычный JavaScript-объект, передаваемый в конструктор
соответствующего класса (Shape, Tween,
Burst и др.).
Ключевая особенность — единый подход к описанию параметров: значения могут быть как статическими, так и динамическими (через функции, диапазоны или специальные синтаксические конструкции).
Пример базового конфигурационного объекта:
const circle = new mojs.Shape({
shape: 'circle',
radius: 50,
fill: 'red',
duration: 1000
});
Конфигурационные объекты в mo.js логически делятся на несколько категорий:
Определяют форму и размеры:
shape — тип фигуры (circle,
rect, polygon, line)radius — радиус (для окружностей)width, height — размеры (для
прямоугольников)points — количество углов (для многоугольников)Пример:
{
shape: 'polygon',
points: 5,
radius: 40
}
Отвечают за визуальное представление:
fill — цвет заливкиstroke — цвет обводкиstrokeWidth — толщина обводкиopacity — прозрачностьПоддерживаются строки, массивы, а также переходы:
{
fill: 'none',
stroke: 'blue',
strokeWidth: { 10: 0 }
}
Определяют положение и преобразования:
x, y — позицияangle — угол поворотаscale — масштабskewX, skewY — искажениеПример:
{
x: { 0: 100 },
scale: { 0: 1.5 },
angle: { 0: 360 }
}
Контролируют длительность и синхронизацию:
duration — длительность анимации (в мс)delay — задержка перед началомrepeat — количество повторенийyoyo — обратное проигрывание{
duration: 1500,
delay: 200,
repeat: 2,
yoyo: true
}
Определяют характер изменения параметров во времени:
easing — функция интерполяцииПример:
{
easing: 'cubic.out'
}
mo.js поддерживает множество предустановленных easing-функций, а также пользовательские.
Одно из ключевых преимуществ конфигурационных объектов — возможность задавать динамические значения.
Запись вида { from: to }:
{
radius: { 20: 80 }
}
означает плавное изменение от 20 до 80.
Используется синтаксис строки:
{
radius: 'rand(10, 50)',
angle: 'rand(0, 360)'
}
Каждый запуск анимации генерирует новое значение.
Можно передавать функции:
{
x: function(el, index) {
return index * 50;
}
}
Функция получает:
Некоторые параметры могут принимать массивы или сложные структуры.
{
fill: ['red', 'blue', 'green']
}
mo.js автоматически интерполирует между значениями.
{
scale: { 0: 0, 50: 1.5, 100: 1 }
}
Позволяет задавать более сложные траектории изменения.
Разные классы mo.js используют собственные наборы параметров.
shaperadiusfillstrokecount — количество элементовdegree — угол разбросаradius — радиус разлётаnew mojs.Burst({
count: 10,
radius: { 0: 100 },
degree: 360
});
onUpdate — функция обновленияonComplete — завершениеnew mojs.Tween({
duration: 1000,
onUpdate: function(progress) {
console.log(progress);
}
});
mo.js позволяет повторно использовать конфигурации через копирование и расширение объектов.
const base = {
duration: 1000,
easing: 'quad.out'
};
const circle = new mojs.Shape(
Object.assign({}, base, {
shape: 'circle',
fill: 'red'
})
);
const base = {
duration: 1000
};
const shape = new mojs.Shape({
...base,
radius: 50
});
Некоторые параметры могут зависеть друг от друга.
{
radius: { 0: 50 },
strokeWidth: function() {
return this.radius / 2;
}
}
this внутри функции ссылается на текущий объект
анимации.
mo.js автоматически работает с различными единицами:
px)%)deg)Пример:
{
x: '100%',
angle: '45deg'
}
Поддерживаются различные форматы:
#ff0000)rgb(255,0,0)){
fill: { '#ff0000': '#0000ff' }
}
Переход между цветами происходит автоматически.
Для анализа поведения анимации используются:
onUpdateПример:
new mojs.Tween({
duration: 1000,
onUpdate(progress) {
console.log(progress);
}
});
const animation = new mojs.Shape({
shape: 'circle',
radius: { 0: 100 },
fill: { 'red': 'blue' },
stroke: 'white',
strokeWidth: { 10: 0 },
opacity: { 1: 0 },
scale: { 0.5: 1.2 },
angle: { 0: 360 },
duration: 1500,
easing: 'cubic.out',
delay: 300
});
В этом примере:
mo.js при инициализации:
Это позволяет:
Если параметр не указан:
Пример:
new mojs.Shape({
radius: 50
});
В этом случае:
fill будет задан по умолчаниюduration примет стандартное значениеКонфигурационные объекты часто уточняются по мере разработки:
Такой подход позволяет постепенно усложнять анимацию без потери контроля над поведением.