Модуль Shape в mo.js представляет собой базовую
единицу визуализации — одиночный графический объект с заданной формой,
параметрами трансформации и анимацией. В отличие от него, другие
сущности библиотеки, такие как ShapeSwirl,
Burst или Transit, реализуют более сложное
поведение, часто опираясь на композицию нескольких Shape-элементов или
добавляя дополнительные алгоритмы движения.
Shape — это декларативный объект, описывающий:
- геометрию (circle, rect, polygon и др.)
- визуальные свойства (цвет, обводка, прозрачность)
- параметры трансформации (scale, rotate, translate)
- тайминг анимации
Другие модули строятся поверх этой концепции, расширяя её.
Отличия в уровне абстракции
Shape работает на низком уровне абстракции:
- описывает один элемент
- требует явного задания всех параметров
- не содержит сложной логики движения
Другие модули:
- инкапсулируют сложные анимационные паттерны
- автоматически управляют группами объектов
- предоставляют готовые визуальные эффекты
Пример:
const shape = new mojs.Shape({
shape: 'circle',
radius: 20,
fill: 'red',
scale: { 0: 1 },
duration: 1000
});
В этом случае вся логика описывается вручную.
Для сравнения, Burst:
const burst = new mojs.Burst({
radius: { 0: 100 },
count: 10,
children: {
shape: 'circle',
fill: 'blue'
}
});
Здесь автоматически создаётся группа элементов с распределением по
радиусу.
Управление множеством
элементов
Shape:
- управляет только одним DOM/SVG элементом
- не имеет встроенной поддержки коллекций
- повторное использование требует ручного создания экземпляров
Другие модули:
- создают и управляют множеством объектов
- используют внутренние циклы и генераторы
- позволяют задавать параметры через
children
Пример различия:
Shape (ручное создание):
for (let i = 0; i < 5; i++) {
new mojs.Shape({
left: i * 30,
top: 0
}).play();
}
Burst (автоматизация):
new mojs.Burst({
count: 5,
radius: 50
}).play();
Поведение и динамика
движения
Shape:
- движение задаётся через простые трансформации
- нет встроенной физики или траекторий
- любые сложные эффекты требуют кастомной логики
Другие модули:
- реализуют готовые алгоритмы движения
- используют кривые Безье, случайность, swirl-эффекты
- поддерживают динамическое распределение
Например, ShapeSwirl:
- автоматически добавляет вращательное движение
- создаёт эффект закручивания траектории
- использует внутренние параметры
swirlSize,
swirlFrequency
Параметры анимации
Shape:
- анимация задаётся напрямую через свойства
- поддерживает tween-подход (from → to)
- требует явного описания каждого параметра
Пример:
scale: { 0: 1 },
opacity: { 1: 0 }
Другие модули:
- имеют дополнительные параметры высокого уровня
- автоматически интерполируют значения для группы элементов
- могут применять случайные диапазоны
Пример:
children: {
delay: 'stagger(100, rand(0, 200))'
}
Производительность и
оптимизация
Shape:
- минимальная нагрузка
- полный контроль над количеством объектов
- подходит для точечной анимации
Другие модули:
- создают множество элементов
- могут увеличивать нагрузку на рендеринг
- используют оптимизации внутри библиотеки, но всё равно тяжелее
Важно:
- при большом количестве объектов
Burst или
Swirl может быть менее эффективен, чем ручное управление
Shape
Повторное использование и
композиция
Shape:
- легко переиспользуется как строительный блок
- может быть частью более сложных структур
- часто используется внутри других модулей
Другие модули:
- менее гибкие в кастомизации
- ориентированы на конкретные сценарии
- сложнее адаптируются под нестандартные задачи
Гибкость настройки
Shape:
- максимальная гибкость
- любые свойства можно контролировать напрямую
- подходит для кастомных анимаций
Другие модули:
- имеют предопределённое поведение
- ограничены рамками своей логики
- требуют обходных решений для нестандартных эффектов
Работа с timeline
Shape:
- легко интегрируется в
Timeline
- каждый объект управляется отдельно
- позволяет точно синхронизировать анимации
Другие модули:
- управляют группами внутри себя
- сложнее контролировать отдельные элементы
- требуют более внимательной настройки задержек
Расширяемость
Shape:
- может быть расширен через кастомные формы
(
custom shape)
- используется как основа для создания новых эффектов
- хорошо подходит для написания собственных модулей
Другие модули:
- не предназначены для расширения
- работают как готовые решения
- ограничены API библиотеки
Работа с SVG и DOM
Shape:
- напрямую создаёт SVG-элемент
- даёт полный контроль над атрибутами
- может быть встроен в существующую разметку
Другие модули:
- управляют несколькими SVG-элементами
- абстрагируют доступ к DOM
- сложнее интегрируются в кастомные структуры
Сценарии использования
Shape:
- одиночные анимации (кнопки, иконки)
- кастомные эффекты
- точечные визуальные элементы
Другие модули:
- всплески, частицы, эффекты разрушения
- сложные интерактивные анимации
- визуальные эффекты высокого уровня
Итоговое
сравнение по ключевым характеристикам
| Характеристика |
Shape |
Другие модули |
| Уровень абстракции |
Низкий |
Высокий |
| Количество объектов |
1 |
Множество |
| Гибкость |
Максимальная |
Ограниченная |
| Простота |
Требует ручной настройки |
Готовые решения |
| Производительность |
Высокая |
Зависит от количества |
| Расширяемость |
Высокая |
Низкая |
Ключевая роль Shape в
экосистеме mo.js
Несмотря на наличие более сложных модулей, Shape
остаётся фундаментальным элементом:
- используется внутри других модулей
- определяет базовую модель анимации
- обеспечивает универсальность библиотеки
Все остальные сущности можно рассматривать как надстройки,
автоматизирующие работу с множеством Shape-объектов и добавляющие
поведенческую логику.