В основе системы воспроизведения в mo.js лежит единый принцип: любой анимационный объект (Tween, Shape, Burst, Timeline) предоставляет унифицированный набор методов управления состоянием. Эти методы позволяют запускать, останавливать, перематывать и синхронизировать анимации без привязки к конкретному типу эффекта.
Метод play() инициирует или возобновляет воспроизведение
анимации с текущей позиции.
Ключевые особенности:
const tween = new mojs.Tween({
duration: 1000,
onUpdate: (p) => console.log(p)
});
tween.play();
play() часто используется в интерактивных сценариях, где
анимация запускается по событию DOM, например клику или наведению.
Метод pause() фиксирует текущее состояние анимации без
сброса прогресса.
Особенности поведения:
play()tween.play();
setTimeout(() => {
tween.pause();
}, 500);
pause() особенно полезен при построении интерфейсов с
состоянием «hover hold» или при управлении несколькими анимациями
одновременно.
Метод stop() полностью останавливает анимацию и
возвращает её в начальное состояние.
Поведение:
tween.stop();
Используется, когда необходимо гарантированно вернуть объект в исходную позицию перед повторным запуском.
Метод replay() представляет собой комбинацию
stop() и play().
Логика работы:
tween.replay();
Этот метод применяется в случаях, когда требуется повтор анимации без проверки текущего состояния.
Метод reset() возвращает анимацию в начальную точку без
запуска.
Отличие от stop():
tween.reset();
reset() часто используется для подготовки сцены перед
новым запуском или переключением состояний интерфейса.
Метод setProgress() позволяет вручную установить позицию
воспроизведения в диапазоне от 0 до 1.
tween.setProgress(0.5);
Это один из ключевых инструментов для:
Особенности:
Метод seek(time) позволяет установить позицию анимации в
миллисекундах относительно её длительности.
tween.seek(300);
В отличие от setProgress(), seek() работает
с абсолютным временем.
Используется для:
Метод setSpeed() изменяет коэффициент скорости
воспроизведения.
tween.setSpeed(2); // в 2 раза быстрее
tween.setSpeed(0.5); // в 2 раза медленнее
Поведение:
Практическое применение:
Позволяет запустить анимацию в обратном направлении.
tween.playBackward();
Особенности:
Метод reverse() переключает направление
воспроизведения.
tween.reverse();
Поведение:
Используется для toggle-анимаций интерфейса: открытие/закрытие, появление/исчезновение.
Метод isPlaying() возвращает логическое значение
состояния.
if (tween.isPlaying()) {
console.log('Анимация активна');
}
Позволяет:
mo.js предоставляет набор событий, которые позволяют отслеживать жизненный цикл воспроизведения.
Вызывается при старте анимации.
new mojs.Tween({
onStart: () => console.log('start')
});
Срабатывает на каждом кадре.
onUpdate: (progress) => {
console.log(progress);
}
Используется для:
Срабатывает при завершении анимации.
onComplete: () => console.log('done');
Timeline объединяет несколько анимаций и предоставляет централизованное управление.
Методы Timeline:
Добавление анимации в последовательность.
const timeline = new mojs.Timeline();
timeline.add(tween1, tween2);
Поведение аналогично Tween, но применяется ко всей группе анимаций.
timeline.play();
timeline.pause();
timeline.stop();
Позволяет управлять всей последовательностью как единым блоком.
timeline.setProgress(0.3);
mo.js позволяет привязывать управление воспроизведением к внешним источникам событий:
Пример синхронизации со скроллом:
window.addEventListener('scroll', () => {
const progress = window.scrollY / document.body.scrollHeight;
tween.setProgress(progress);
});
В реальных сценариях методы управления редко используются изолированно. Чаще применяется комбинация:
pause() + setProgress() для интерактивного
контроляstop() + play() для полного перезапуска
логикиreverse() + setSpeed() для адаптивных
эффектовTimeline + seek() для точной синхронизации
сложных сцен