Компонент v-progress-circular
библиотеки Vuetify предназначен для визуального отображения прогресса в
виде кольцевого индикатора. Он используется как для индикации выполнения
операций с известным процентом завершения, так и для бесконечного
загрузочного индикатора.
Базовая структура компонента выглядит следующим образом:
<v-progress-circular
:size="70"
:width="7"
:value="progress"
color="primary"
></v-progress-circular>
size — диаметр индикатора в
пикселях.width — толщина кольца
индикатора.value — числовое значение прогресса от
0 до 100.color — цвет индикатора, можно
использовать предустановленные цвета Vuetify (primary,
secondary, error, success,
warning).Если value не задан, компонент
отображается как индетерминированный индикатор,
вращающийся бесконечно, что удобно для отображения загрузки данных.
Для динамического изменения прогресса используется связывание с переменной в состоянии компонента:
data() {
return {
progress: 0
}
},
mounted() {
setInterval(() => {
if (this.progress < 100) {
this.progress += 10
} else {
this.progress = 0
}
}, 1000)
}
Здесь значение progress изменяется
каждые 1 секунду, что демонстрирует плавное заполнение кольца.
Ключевые моменты управления прогрессом:
value строго в диапазоне
0–100.value, а добавить
indeterminate:<v-progress-circular
indeterminate
color="secondary"
size="50"
></v-progress-circular>
Цвет и толщина Цвет кольца задаётся через проп
color. Можно использовать темы Vuetify или кастомные
цвета:
<v-progress-circular
:value="60"
color="#FF5722"
width="10"
></v-progress-circular>
Размер и ширина кольца
size регулирует общий диаметр индикатора.width регулирует толщину линии.Добавление текста внутри индикатора Для отображения
числа прогресса внутри кольца используется слот
default:
<v-progress-circular
:value="progress"
size="80"
width="8"
color="primary"
>
{{ progress }}%
</v-progress-circular>
Слот позволяет вставлять любой контент, включая иконки или кастомный HTML.
Vuetify поддерживает плавную анимацию заполнения кольца при изменении
значения value. Для более сложных эффектов можно
использовать CSS-переходы и слоты:
.v-progress-circular__overlay {
transition: stroke-dasharray 0.5s ease;
}
Проп rotate позволяет поворачивать начальную точку
индикатора:
<v-progress-circular
:value="75"
rotate="90"
color="success"
></v-progress-circular>
Здесь отсчёт прогресса начинается с правой стороны (90°).
Vuetify позволяет использовать динамическое изменение цвета индикатора в зависимости от значения прогресса:
<v-progress-circular
:value="progress"
:color="progress > 50 ? 'success' : 'warning'"
size="60"
width="6"
></v-progress-circular>
Для градиентных эффектов можно использовать CSS:
.gradient-progress .v-progress-circular__underlay,
.gradient-progress .v-progress-circular__overlay {
stroke: url(#gradient);
}
<svg>
<defs>
<linearGradient id="gradient" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" stop-color="#FF5722"/>
<stop offset="100%" stop-color="#FFC107"/>
</linearGradient>
</defs>
</svg>
<v-progress-circular class="gradient-progress" :value="80" size="70" width="8"></v-progress-circular>
Индикатор загрузки: бесконечное вращение при запросах к серверу. Отображение прогресса: визуализация выполнения задач, например, скачивания файлов, заполнения форм или загрузки данных. Кастомные элементы: комбинация текста, иконок и прогресса позволяет создать компактный и информативный UI-блок.
indeterminate для асинхронных операций без
точного значения прогресса.error, success, warning).value, чтобы избежать лишних
перерисовок.v-progress-circular хорошо сочетается с компонентами
v-btn,
v-card и
v-dialog:
<v-btn color="primary" :loading="loading">
Загрузить
<v-progress-circular
v-if="loading"
indeterminate
color="white"
size="20"
width="2"
></v-progress-circular>
</v-btn>
Такое решение позволяет встроить индикатор внутрь кнопки, показывая состояние загрузки без отдельного блока.
Использование v-progress-circular в связке с другими
компонентами Vuetify обеспечивает визуально согласованный и удобный
интерфейс, где индикатор прогресса легко интегрируется в любую часть
приложения.