Метод pause() используется для временной остановки
анимации в библиотеке mo.js без сброса её текущего
состояния. Это означает, что после вызова паузы анимация
«замораживается» на текущем кадре и может быть продолжена с того же
места при помощи метода play().
Внутри mo.js каждая анимация управляется внутренним таймлайном. При
вызове pause() происходит:
В отличие от метода stop(), который полностью завершает
анимацию и сбрасывает её состояние, pause() сохраняет
контекст выполнения.
animation.pause();
Где animation — экземпляр анимационного объекта mo.js
(например, mo.Tween, mo.Timeline,
mo.Burst, mo.Shape и др.).
const circle = new mojs.Shape({
shape: 'circle',
radius: { 0: 100 },
duration: 2000
});
// запуск анимации
circle.play();
// пауза через 1 секунду
setTimeout(() => {
circle.pause();
}, 1000);
В этом примере:
play()pause()После остановки можно продолжить анимацию:
circle.play();
mo.js автоматически продолжит воспроизведение с момента, на котором была вызвана пауза.
Если pause() вызывается:
play()) — анимация
остаётся в начальном состоянииМетод pause() особенно важен при работе с
mojs.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();
// пауза всех анимаций
timeline.pause();
При вызове pause() у Timeline:
Если у анимации задана задержка (delay):
const shape = new mojs.Shape({
delay: 1000,
duration: 2000
});
При вызове pause() во время задержки:
play()) отсчёт продолжается с того
же моментаПри использовании параметров:
repeat: 3,
yoyo: true
метод pause():
Часто pause() используется в обработчиках событий:
document.addEventListener('click', () => {
circle.pause();
});
или:
document.addEventListener('visibilitychange', () => {
if (document.hidden) {
circle.pause();
} else {
circle.play();
}
});
Такая практика позволяет:
Метод pause() часто применяется:
1. При наведении (hover-пауза):
element.addEventListener('mouseenter', () => circle.pause());
element.addEventListener('mouseleave', () => circle.play());
2. В медиаплеерах и UI-компонентах:
3. При переходах между страницами:
| Метод | Поведение |
|---|---|
play() |
Запускает или продолжает |
pause() |
Останавливает без сброса |
stop() |
Останавливает и сбрасывает |
replay() |
Перезапускает с начала |
Ключевое отличие pause() — сохранение текущего
состояния.
requestAnimationFramepause() отключается цикл обновленияcurrentTime)Это обеспечивает точное восстановление анимации.
1. Потеря ссылки на объект
let anim = new mojs.Shape(...);
anim.play();
anim = null;
// pause() уже невозможен
2. Конфликт с внешними таймерами
Если используются setTimeout или
setInterval, важно учитывать, что:
pause() не влияет на внешние таймеры3. Асинхронные сценарии
При работе с промисами:
setTimeout(() => circle.pause(), 500);
setTimeout(() => circle.play(), 600);
возможны неожиданные эффекты при наложении событий.
pause() вместо stop(), если
требуется продолжениеplay() для создания
интерактивностиTimeline для централизованного
управленияif (circle._isPlaying) {
circle.pause();
} else {
circle.play();
}
Хотя _isPlaying — внутреннее свойство, его иногда
используют для простого контроля состояния.
Метод pause():