Метод play() является основным инструментом управления
воспроизведением анимации в библиотеке mo.js. Он
инициирует проигрывание заранее сконфигурированного анимационного
объекта, будь то Shape, Burst,
Timeline или любая другая сущность, поддерживающая
временную шкалу.
Каждый анимационный объект в mo.js содержит внутренний механизм тайминга, основанный на параметрах:
duration — длительность анимацииdelay — задержка перед стартомrepeat — количество повторенийyoyo — обратное проигрываниеМетод play() активирует этот механизм, переводя объект
из состояния покоя в состояние воспроизведения.
Простейший пример:
const circle = new mojs.Shape({
shape: 'circle',
radius: { 0: 50 },
duration: 1000
});
circle.play();
После вызова play() анимация начинается немедленно (с
учётом delay, если он задан).
Если анимация уже воспроизводится, повторный вызов
play() не запускает её заново, а игнорируется. Это важно
учитывать при управлении состоянием:
circle.play();
circle.play(); // не перезапустит анимацию
Для перезапуска используется связка с методом replay()
или предварительный stop().
mo.js оперирует несколькими внутренними состояниями:
Метод play() переводит объект:
idle → playingpaused → playing (продолжение с
текущего места)stopped → playing (с начала)TimelineПри работе с несколькими анимациями удобнее использовать
Timeline, который позволяет синхронизировать несколько
эффектов:
const shape1 = new mojs.Shape({ x: { 0: 100 } });
const shape2 = new mojs.Shape({ y: { 0: 100 } });
const timeline = new mojs.Timeline();
timeline.add(shape1, shape2);
timeline.play();
Вызов play() у Timeline запускает все
добавленные анимации с учётом их индивидуальных параметров.
delay)Метод play() не игнорирует параметр delay.
Если он задан, фактический старт анимации откладывается:
const shape = new mojs.Shape({
radius: { 0: 40 },
delay: 500,
duration: 1000
});
shape.play(); // визуально начнётся через 500 мс
Это позволяет точно выстраивать последовательности без дополнительной логики.
play() + pause()shape.play();
shape.pause();
shape.play(); // продолжение с паузы
play() + stop()shape.play();
shape.stop();
shape.play(); // начнёт заново
play() + replay()shape.play();
shape.replay(); // гарантированный перезапуск
Метод play() часто используется в обработчиках
событий:
document.addEventListener('click', () => {
shape.play();
});
Или, например, при наведении:
element.addEventListener('mouseenter', () => shape.play());
Это открывает возможности для интерактивных интерфейсов.
isPlayingДля предотвращения нежелательных вызовов можно использовать проверку состояния:
if (!shape.isPlaying()) {
shape.play();
}
Метод isPlaying() возвращает true, если
анимация активна.
BurstАнимации типа Burst (взрывы частиц) часто запускаются
именно через play():
const burst = new mojs.Burst({
radius: { 0: 100 },
count: 10
});
burst.play();
Каждый вызов play() создаёт новый визуальный эффект,
если объект не остановлен.
repeat и
yoyoЕсли заданы параметры:
repeat: 2,
yoyo: true
то play() инициирует полный цикл:
Метод управляет всей последовательностью автоматически.
play() запускает анимацию с учётом функции сглаживания
(easing):
const shape = new mojs.Shape({
x: { 0: 200 },
easing: 'cubic.out',
duration: 1000
});
shape.play();
Без вызова play() easing не применяется, так как
анимация не активна.
Метод play() можно комбинировать с then()
для последовательных анимаций:
shape
.then({ x: 100 })
.then({ y: 100 });
shape.play();
play() запускает всю цепочку анимаций.
play() без необходимости могут
создавать лишнюю нагрузкуTimeline снижает количество отдельных
вызововИногда анимация создаётся заранее, но запускается позже:
const anim = new mojs.Shape({
opacity: { 0: 1 },
duration: 500
});
// позже
anim.play();
Это позволяет отделить конфигурацию от момента исполнения.
Хотя play() сам по себе не возвращает
Promise, можно отслеживать окончание через
onComplete:
const shape = new mojs.Shape({
duration: 1000,
onComplete() {
console.log('Анимация завершена');
}
});
shape.play();
1. Анимация не запускается
Причины:
duration: 0)playing2. Повторный вызов не работает
Использовать replay() вместо play().
3. Не учитывается задержка
delay работает только при первом запуске или после
stop().
| Метод | Поведение |
|---|---|
play() |
Запуск или продолжение |
pause() |
Приостановка |
stop() |
Остановка и сброс |
replay() |
Полный перезапуск |
Под капотом play():
requestAnimationFrameprogress)Это делает его ключевым элементом жизненного цикла любой анимации в mo.js.
const shapes = Array.from({ length: 5 }, () =>
new mojs.Shape({ radius: { 0: 30 } })
);
shapes.forEach(shape => shape.play());
shapes.forEach((shape, i) => {
shape.delay = i * 100;
shape.play();
});
play() часто становится частью более сложной логики:
Метод play() — это точка входа в выполнение анимации. Он
не изменяет конфигурацию, не пересоздаёт объект, а лишь активирует уже
описанное поведение. Эффективное использование этого метода требует
понимания состояний анимации, взаимодействия с другими методами и
грамотной организации временной логики.