Механизм stagger в библиотеке mo.js используется для
создания последовательных или распределённых анимаций группы элементов.
В отличие от базового применения, где чаще всего варьируется только
задержка (delay), stagger позволяет управлять
практически любыми параметрами — от масштаба и цвета до траекторий
движения и прозрачности.
Это даёт возможность формировать сложные визуальные композиции с минимальным количеством кода, сохраняя читаемость и гибкость.
stagger — это функция-генератор значений. Она принимает
диапазон или список значений и возвращает функцию, которая будет
выдавать разные значения для каждого элемента в группе.
Пример концепции:
mojs.stagger(начало, конец, { опции })
или
mojs.stagger([значение1, значение2, значение3])
Каждый элемент получает своё значение в зависимости от индекса.
Анимация масштаба часто используется для создания эффекта “всплеска” или “волны”.
const burst = new mojs.Burst({
count: 5,
scale: { 0: 1 },
children: {
scale: mojs.stagger([0.5, 1.5])
}
});
Особенности:
Позволяет создавать плавные исчезающие или появляющиеся цепочки элементов.
children: {
opacity: mojs.stagger([0, 1])
}
Вариант с диапазоном:
children: {
opacity: mojs.stagger(0.2, 1)
}
Применение:
Используется для управления направлением движения элементов.
const burst = new mojs.Burst({
count: 6,
angle: 0,
children: {
angle: mojs.stagger(0, 360)
}
});
Результат:
Позволяет задавать разную длину движения для элементов.
children: {
radius: mojs.stagger(20, 100)
}
Эффекты:
Позволяет создавать градиентные или разноцветные анимации.
children: {
fill: mojs.stagger(['red', 'blue', 'green', 'yellow'])
}
С диапазоном:
children: {
fill: mojs.stagger(['#ff0000', '#0000ff'])
}
Особенности:
Добавляет вариативность вращения элементов.
children: {
rotate: mojs.stagger(0, 360)
}
Результат:
Можно комбинировать разные формы в одной анимации.
children: {
shape: mojs.stagger(['circle', 'rect', 'polygon'])
}
Эффекты:
stagger поддерживает параметры сглаживания.
children: {
scale: mojs.stagger(0.5, 1.5, {
easing: 'cubic.out'
})
}
Это позволяет:
Позволяет задавать фиксированный шаг между значениями.
children: {
radius: mojs.stagger(10, 100, {
step: 15
})
}
Особенности:
Определяет начальное значение смещения.
children: {
rotate: mojs.stagger(0, 360, {
start: 45
})
}
Результат:
Меняет порядок значений.
children: {
scale: mojs.stagger(0.5, 1.5, {
reverse: true
})
}
Используется для:
Добавляет случайность.
children: {
radius: mojs.stagger(20, 100, {
random: true
})
}
Особенности:
Можно применять stagger одновременно к нескольким параметрам:
children: {
radius: mojs.stagger(20, 100),
scale: mojs.stagger(0.5, 1.5),
rotate: mojs.stagger(0, 360),
fill: mojs.stagger(['red', 'blue', 'green'])
}
Результат:
stagger особенно эффективен в сочетании с Timeline:
const timeline = new mojs.Timeline();
timeline.add(
new mojs.Burst({
children: {
delay: mojs.stagger(0, 300),
scale: mojs.stagger(0.5, 1.2)
}
})
);
Позволяет:
При использовании stagger с большим количеством элементов важно учитывать:
count)random)Рекомендации:
Эффект волны
scale: mojs.stagger(0.8, 1.2)
Эффект взрыва
radius: mojs.stagger(30, 150),
angle: mojs.stagger(0, 360)
Градиентная анимация
fill: mojs.stagger(['#ff0000', '#00ffcc'])
Хаотичное движение
radius: mojs.stagger(20, 100, { random: true }),
rotate: mojs.stagger(0, 360, { random: true })
stagger можно комбинировать с функциями:
children: {
radius: mojs.stagger(20, 100, {
easing: (p) => Math.sin(p * Math.PI)
})
}
Это позволяет:
stagger возвращает функцию, которая:
Это делает его универсальным инструментом для генерации параметров.
stagger вне childrenstagger — это не просто утилита, а фундаментальный
инструмент:
За счёт этого mo.js остаётся лаконичным, но мощным инструментом для создания сложных визуальных эффектов.