В библиотеке Vivus управление состоянием анимации не ограничивается
запуском через play(). Существенную роль в интерактивных
интерфейсах и сценариях повторного использования SVG-анимаций играют
методы reset() и finish(), позволяющие жестко
контролировать текущее положение анимации на временной шкале.
Метод reset() полностью обнуляет прогресс анимации и
возвращает SVG-элементы в состояние до начала отрисовки.
При вызове:
reset() применяется в ситуациях, где требуется повторное
воспроизведение анимации с начала без перезагрузки страницы или
пересоздания экземпляра:
const anim = new Vivus('my-svg', {
type: 'delayed',
duration: 200
});
// запуск анимации
anim.play();
// сброс состояния через 2 секунды
setTimeout(() => {
anim.reset();
}, 2000);
После вызова reset() SVG возвращается к начальному
состоянию, и для повторного запуска требуется снова вызвать
play().
Частая схема использования:
anim.reset();
anim.play();
Важный момент заключается в том, что reset() не
инициирует повторную анимацию автоматически, а лишь подготавливает
объект к новому запуску.
reset() часто связывается с событиями интерфейса:
document.getElementById('restart').addEventListener('click', () => {
anim.reset();
anim.play();
});
Такая схема используется в интерактивных прототипах, обучающих визуализациях и графических панелях.
Метод finish() переводит анимацию в полностью
завершённое состояние без промежуточных кадров.
При вызове:
finish() используется, когда требуется:
const anim = new Vivus('my-svg', {
type: 'sync',
duration: 150
});
// мгновенное завершение через 1 секунду
setTimeout(() => {
anim.finish();
}, 1000);
После вызова метод переводит SVG в полностью отрисованное состояние, независимо от текущего прогресса.
При обычном play() анимация проходит все промежуточные
шаги, включая задержки и тип анимации (delayed,
sync, oneByOne). finish() же
игнорирует всю временную логику и сразу устанавливает конечный кадр.
Комбинация методов позволяет строить сложные сценарии управления визуализацией.
anim.reset();
anim.finish();
Такой вызов переводит SVG в завершённое состояние, минуя анимацию. На практике используется редко, но может применяться для инициализации интерфейса в «готовом» виде.
function toggleAnimation(state) {
if (state === 'start') {
anim.reset();
anim.play();
}
if (state === 'end') {
anim.finish();
}
}
Подобная логика характерна для интерфейсов с режимами отображения: предварительный просмотр, демонстрация, статичное состояние.
Оба метода воздействуют на внутренний механизм управления путями SVG:
reset() возвращает состояние stroke-dashoffset к
начальному значениюfinish() устанавливает stroke-dashoffset в конечное
значение (обычно 0)При этом экземпляр анимации не уничтожается, что позволяет многократно переиспользовать один и тот же объект без пересоздания DOM-логики.
В сложных интерфейсах управление часто сводится к трём базовым состояниям:
reset())play())finish())Такой подход позволяет строить предсказуемые анимационные машины состояний, где Vivus выступает как слой визуального исполнения SVG-переходов.