Количество частиц в mo.js определяется параметром count
и напрямую задаёт плотность, визуальную насыщенность и поведенческую
сложность анимации. При увеличении числа частиц возрастает не только
визуальный объём эффекта, но и нагрузка на вычислительный процесс,
поскольку каждая частица представляет собой отдельный анимируемый объект
с собственной траекторией, стилем и временной функцией.
В системе mojs.Burst параметр count задаёт
количество дочерних элементов, создаваемых при запуске эффекта. Эти
элементы распределяются вокруг центра по заданной геометрии: углу,
радиусу и функции рассеивания. Базовая модель поведения предполагает
равномерное распределение частиц по окружности, однако на практике
распределение часто модифицируется случайностью и анимационными
кривыми.
При малом значении count (от 3 до 8) формируется
минималистичная структура, в которой каждая частица воспринимается как
отдельный визуальный акцент. Такие конфигурации применяются в
интерфейсах, где важна читаемость и отсутствие перегрузки.
Средние значения count (от 10 до 30) создают плотные
всплески, характерные для интерактивных событий: кликов, подтверждений
действий, переходов состояний. В этом диапазоне начинает проявляться
эффект групповой динамики — частицы воспринимаются не как отдельные
элементы, а как единое облако движения.
Высокие значения count (от 40 и выше) формируют плотные
визуальные облака, где индивидуальная траектория каждой частицы
становится менее значимой, а доминирует общий эффект взрыва или распада.
При этом возрастает вероятность перекрытия частиц и визуального шума,
что требует управления прозрачностью, масштабом и временем жизни.
Тип частицы определяется параметром shape внутри объекта
children. Этот параметр задаёт геометрию визуального
элемента и влияет на восприятие движения и плотности.
Основные формы:
circle — базовая круглая частица, используется для
мягких, нейтральных эффектовrect — прямоугольная форма, создаёт более «жёсткое»
визуальное ощущениеpolygon — многоугольник с изменяемым числом сторонline — линейный сегмент, подчёркивает направление
движенияcross — крестообразная форма, усиливает ощущение
разлётаzigzag — ломаная форма, используется для динамичных,
«энергетических» эффектовКаждая форма по-разному взаимодействует с восприятием движения. Например, круги визуально сглаживают анимацию, тогда как линии усиливают ощущение скорости и направления.
В mo.js допускается использование разных типов частиц в
рамках одного Burst. Это реализуется через массив
конфигураций или через функцию генерации детей. Такой подход позволяет
создавать неоднородные визуальные структуры, где каждая частица имеет
собственную форму, масштаб и поведение.
Пример вариативной конфигурации:
const burst = new mojs.Burst({
radius: { 0: 120 },
count: 20,
children: [
{
shape: 'circle',
fill: '#FF6B6B'
},
{
shape: 'rect',
fill: '#4ECDC4'
},
{
shape: 'polygon',
points: 6,
fill: '#FFD93D'
}
]
});
В подобных конфигурациях распределение типов может быть равномерным или управляемым через функцию, возвращающую параметры для каждого индекса частицы.
Количество частиц тесно связано с угловым шагом их размещения. При равномерном распределении используется деление полного круга:
360° / countПри увеличении count угловой шаг уменьшается, что
приводит к более плотному визуальному кольцу. Однако в
mo.js редко используется строго детерминированное
распределение — чаще применяется случайное смещение угла:
Это создаёт эффект естественного разброса и снижает механистичность анимации.
При увеличении count часто требуется компенсировать
визуальную перегрузку через уменьшение размера частиц. В
mo.js это достигается параметром radius,
который может быть задан как диапазон:
radius: { 0: 30 }
или фиксированное значение:
radius: 10
При большом количестве частиц используются меньшие значения радиуса, чтобы избежать пересечения и визуальной каши. При малом количестве радиус увеличивается, чтобы компенсировать недостаток плотности.
Каждая частица имеет собственный жизненный цикл, задаваемый
параметрами duration, delay и
speed. При увеличении count часто применяется
фазовое смещение (staggering), чтобы избежать
одновременного старта всех элементов.
Фазовое распределение:
delay: 'stagger(50)'
Такое распределение создаёт ощущение волнового выброса, где частицы появляются не одновременно, а последовательно.
Различие между типами частиц проявляется не только визуально, но и в динамике:
circle сохраняет стабильность формы при
масштабированииrect демонстрирует выраженные углы, усиливающие эффект
вращенияpolygon добавляет сложность при изменении числа
сторонline усиливает направленность движенияzigzag визуально имитирует энергию или шумПри одинаковых параметрах движения разные формы дают разный эмоциональный и визуальный отклик.
При небольшом количестве частиц допустимо использование сложных форм (polygon, zigzag), поскольку каждая частица воспринимается индивидуально. При большом количестве предпочтение отдается простым формам (circle, rect), так как сложная геометрия при высокой плотности приводит к визуальной перегрузке и снижению различимости элементов.
Каждая форма требует разного объёма вычислений при рендеринге:
При увеличении count нагрузка масштабируется линейно,
однако сложность формы может давать нелинейный рост затрат, особенно при
высокой частоте анимационных кадров.
Для создания неоднородных эффектов применяется параметрическая генерация:
children: {
shape: () => ['circle', 'rect', 'polygon'][Math.floor(Math.random() * 3)],
radius: { 0: 'rand(10, 30)' }
}
Такой подход позволяет объединять большое количество частиц с различными характеристиками без ручного перечисления конфигураций.
Соотношение количества и типа частиц формирует плотность визуального поля. Плотность определяется не только числом элементов, но и их размером, формой и прозрачностью. При высокой плотности:
При низкой плотности:
Сочетание количества и типа частиц формирует базовую выразительность эффекта. Простые формы при высоком количестве создают ощущение энергии и скорости. Сложные формы при малом количестве формируют акцентированные, детализированные вспышки. Комбинации этих параметров позволяют управлять визуальным языком интерфейса без изменения логики взаимодействия.