Случайные значения в анимациях используются для разрушения повторяемости сцен, создания органичных движений и генерации вариативных эффектов без ручного перечисления всех состояний. В контексте mo.js для этого применяется встроенный генератор rand, позволяющий задавать диапазоны и получать значения на лету в момент построения анимации или при каждом рендере элемента.
Базовая форма работы с rand строится вокруг указания минимального и максимального значения. Результатом становится число, которое попадает в заданный интервал.
mojs.rand(0, 100);
Возвращаемое значение может быть как целым, так и дробным в зависимости от внутренней реализации генератора и типа интервала. Такой подход позволяет использовать один и тот же параметр анимации, получая разные визуальные результаты при каждом создании объекта.
Случайные значения особенно эффективно применяются внутри конфигураций объектов mo.js. Любое числовое свойство может быть заменено на вызов генератора, что делает каждый экземпляр уникальным.
const circle = new mojs.Shape({
shape: 'circle',
radius: mojs.rand(20, 80),
duration: 1000,
fill: 'cyan'
});
В этом примере каждый новый объект получает собственный радиус. При массовом создании элементов это приводит к естественной неоднородности композиции.
В mo.js поддерживается формат задания анимации через объект с начальным и конечным значением. В такие конструкции также может быть встроен rand, формируя непредсказуемую траекторию изменения параметра.
const burst = new mojs.Burst({
radius: { 0: mojs.rand(60, 180) },
count: 8
});
Здесь максимальный радиус не фиксирован, а вычисляется в момент создания экземпляра. Это приводит к тому, что каждый запуск burst отличается масштабом.
При работе с множественными частицами rand используется для распределения параметров между дочерними элементами. Особенно это заметно в Burst и staggered-анимациях.
const burst = new mojs.Burst({
count: 12,
children: {
shape: 'circle',
radius: mojs.rand(5, 25),
fill: ['red', 'blue', 'green'][Math.floor(mojs.rand(0, 3))]
}
});
Здесь каждая частица получает собственный радиус и цвет. Подобный подход снижает визуальную регулярность и делает взрыв более «живым».
Вместо прямого значения может задаваться функция, возвращающая результат rand. Такой подход позволяет пересчитывать значения при каждом создании или пересборке анимации.
const line = new mojs.Shape({
shape: 'line',
strokeWidth: function () {
return mojs.rand(1, 6);
},
stroke: 'white'
});
Функциональная форма добавляет дополнительный уровень гибкости, особенно в сложных сценах, где параметры должны зависеть от контекста или повторного вызова.
Случайные значения часто применяются не только к геометрии, но и к временным характеристикам анимации. Это позволяет избежать синхронного движения элементов.
const tween = new mojs.Tween({
duration: mojs.rand(300, 1200),
delay: mojs.rand(0, 500)
});
В результате элементы стартуют в разное время и имеют разную длительность, что создаёт эффект естественного движения вместо механической синхронизации.
rand используется для задания случайных координатных отклонений, особенно в эффектах рассеивания и взрывов.
const particle = new mojs.Shape({
shape: 'circle',
x: mojs.rand(-100, 100),
y: mojs.rand(-100, 100),
radius: 10
});
Такое распределение формирует облако элементов, равномерно заполняющее пространство вокруг центра.
При повторном создании одной и той же анимации значения rand пересчитываются заново, что приводит к разным результатам. Это поведение используется для генерации вариативных сцен без хранения состояния.
const createExplosion = () => new mojs.Burst({
radius: mojs.rand(50, 150),
count: mojs.rand(6, 20)
});
Каждый вызов функции создаёт уникальный burst, отличающийся масштабом и количеством элементов.
При комбинировании нескольких объектов с независимыми вызовами rand формируется система стохастических параметров. Это особенно важно при построении фоновых анимаций, частиц и декоративных эффектов.
const stars = Array.from({ length: 30 }).map(() => new mojs.Shape({
shape: 'circle',
radius: mojs.rand(1, 4),
x: mojs.rand(-300, 300),
y: mojs.rand(-200, 200),
opacity: mojs.rand(0.2, 1)
}));
Результат представляет собой распределённое поле объектов, где каждый элемент имеет собственный набор параметров, не повторяющий остальные.
Использование rand при массовом создании объектов требует контроля частоты генерации, поскольку пересчёт случайных значений при каждом рендере может увеличивать вариативность до непредсказуемого уровня. В статических сценах значения обычно фиксируются один раз при инициализации, после чего повторно не пересчитываются.
Основной эффект применения rand заключается в разрушении визуальной симметрии. При одинаковых параметрах анимация выглядит механически, тогда как случайные диапазоны формируют органические структуры движения, где каждый элемент получает собственную траекторию, масштаб или длительность.
const wave = new mojs.Shape({
shape: 'rect',
width: mojs.rand(10, 60),
height: mojs.rand(2, 20),
angle: mojs.rand(0, 360),
duration: mojs.rand(500, 1500)
});
Комбинация нескольких случайных параметров создаёт эффект хаотичной, но визуально согласованной динамики, особенно заметной в сложных сценах с большим количеством объектов.