В библиотеке mo.js цветовая модель анимаций строится вокруг двух
основных визуальных свойств графических примитивов и форм:
fill (заливка) и stroke (обводка). Эти
параметры определяют внешний вид объектов Shape,
Burst, Html и других визуальных сущностей.
Fill отвечает за внутреннюю заливку фигуры. Stroke определяет цвет линии обводки, окружающей форму.
Оба свойства поддерживают широкий спектр форматов цвета и могут участвовать в анимации как числовые или строковые значения, интерполируемые движком mo.js.
mo.js поддерживает стандартные веб-форматы цвета, что делает интеграцию с CSS интуитивной:
fill: '#ff6b6b',
stroke: '#1e90ff'
HEX-формат используется чаще всего благодаря компактности и совместимости с дизайнерскими инструментами.
fill: 'rgb(255, 107, 107)',
stroke: 'rgba(30, 144, 255, 0.8)'
RGBA позволяет управлять прозрачностью через альфа-канал, что особенно полезно при наложении анимаций.
fill: 'hsl(0, 100%, 70%)',
stroke: 'hsla(210, 100%, 56%, 0.9)'
HSL удобен для динамических изменений оттенка, насыщенности и светлоты, особенно при генеративных анимациях.
Основная модель применения реализуется через объект
Shape.
const shape = new mojs.Shape({
shape: 'circle',
fill: '#ff6b6b',
stroke: '#1e90ff',
strokeWidth: 8,
radius: 40
});
shape.play();
fill задаёт внутреннюю заливку кругаstroke формирует внешнюю обводкуstrokeWidth управляет толщиной линииПри отсутствии fill форма становится прозрачной внутри.
При отсутствии stroke отсутствует контур.
Один из ключевых механизмов mo.js — интерполяция значений свойств во времени.
const shape = new mojs.Shape({
shape: 'rect',
fill: { '#ff6b6b': '#4ecdc4' },
radius: 30,
duration: 1000
});
Цвет плавно интерполируется от одного значения к другому в течение заданного времени.
const shape = new mojs.Shape({
shape: 'circle',
stroke: { '#1e90ff': '#ff6b6b' },
strokeWidth: 6,
radius: 50,
duration: 1200
});
Обводка может анимироваться независимо от заливки, создавая эффект «перекраски» контура.
Комбинированная анимация позволяет создавать сложные визуальные эффекты, особенно в burst-анимациях.
const shape = new mojs.Shape({
shape: 'polygon',
fill: { '#ff6b6b': '#ffe66d' },
stroke: { '#1e90ff': '#4ecdc4' },
strokeWidth: 10,
radius: 60,
duration: 1500
});
Оба параметра интерполируются параллельно, но могут иметь разную динамику при использовании ключевых кадров.
mo.js поддерживает многоточечную интерполяцию через массивы значений.
const shape = new mojs.Shape({
shape: 'circle',
fill: {
'#ff6b6b': '#ffe66d': '#4ecdc4'
},
duration: 2000
});
В этом случае цвет проходит через промежуточное состояние без необходимости вручную задавать несколько анимаций.
Цветовые переходы подчиняются системе easing, как и любые другие параметры.
const shape = new mojs.Shape({
shape: 'circle',
fill: { '#ff6b6b': '#4ecdc4' },
easing: 'cubic.out',
duration: 1000
});
Обводка в mo.js часто используется совместно с анимацией цвета для усиления визуального эффекта.
const shape = new mojs.Shape({
shape: 'circle',
stroke: { '#ffffff': '#000000' },
strokeWidth: { 2: 12 },
fill: 'none',
radius: 40,
duration: 1200
});
Изменение толщины обводки усиливает восприятие цветового перехода.
Alpha-канал позволяет создавать эффекты исчезновения или появления.
const shape = new mojs.Shape({
shape: 'rect',
fill: { 'rgba(255, 107, 107, 1)': 'rgba(255, 107, 107, 0)' },
stroke: '#1e90ff',
strokeWidth: 5,
radius: 30,
duration: 800
});
Такая техника часто используется для fade-out анимаций.
mo.js позволяет задавать динамические значения через функции, что особенно полезно при создании вариативных анимаций.
const shape = new mojs.Shape({
shape: 'circle',
fill: function () {
return `hsl(${Math.random() * 360}, 100%, 60%)`;
},
radius: 40,
duration: 1000
});
Каждый запуск создаёт новый оттенок, сохраняя структуру анимации.
В Burst цветовые параметры часто применяются к дочерним
формам.
const burst = new mojs.Burst({
radius: { 0: 100 },
count: 8,
children: {
shape: 'circle',
fill: { '#ff6b6b': '#ffe66d' },
stroke: '#1e90ff',
strokeWidth: 4,
duration: 1000
}
});
Каждый элемент burst наследует цветовую анимацию, но может иметь независимую вариативность.
mo.js работает поверх DOM/SVG, поэтому fill и stroke фактически соответствуют SVG-атрибутам:
fill → fillstroke → strokestrokeWidth → stroke-widthЭто позволяет совмещать mo.js-анимации с ручной SVG-разметкой.
const shape = new mojs.Shape({
shape: 'circle',
parent: document.querySelector('svg'),
fill: '#ff6b6b',
stroke: '#1e90ff',
strokeWidth: 3
});
При анимации mo.js использует внутренний механизм преобразования цветов в числовое пространство, что позволяет:
Пример смешанного задания:
const shape = new mojs.Shape({
shape: 'circle',
fill: { '#ff6b6b': 'rgba(30,144,255,0.5)' },
duration: 1500
});
Некоторые формы могут визуально «исчезать», если не задан fill или stroke:
fill: 'none',
stroke: 'none'
Одновременное использование прозрачного fill и stroke может приводить к слабой читаемости анимации.
Хотя mo.js поддерживает большинство форматов, смешивание нестандартных строк может привести к некорректной интерполяции.
Сложные эффекты достигаются комбинацией нескольких параметров:
const shape = new mojs.Shape({
shape: 'polygon',
fill: { '#ff6b6b': '#4ecdc4' },
stroke: { '#ffffff': '#1e90ff' },
strokeWidth: { 1: 10 },
radius: 50,
duration: 1600,
easing: 'cubic.out'
});