Radix UI предоставляет мощный набор компонентов для создания интерактивных интерфейсов, включая элементы отображения прогресса. Различие между определенным и неопределенным прогрессом важно для построения корректного пользовательского опыта, особенно в ситуациях загрузки данных или выполнения длительных операций.
Определенный прогресс используется, когда известен
точный процент завершения задачи. В Radix UI компонент
Progress позволяет визуализировать этот тип прогресса с
гибкой настройкой внешнего вида и анимаций.
Пример использования:
import * as Progress from '@radix-ui/react-progress';
function DeterminateProgress({ value }) {
return (
);
}
Ключевые моменты:
Progress.Root задаёт контейнер прогресса.value определяет текущий процент
выполнения.Progress.Indicator визуализирует текущий прогресс с
помощью CSS-трансформаций.transition.CSS-стили для визуальной части могут быть следующими:
.progress-root {
position: relative;
width: 100%;
height: 8px;
background-color: #e0e0e0;
border-radius: 4px;
overflow: hidden;
}
.progress-indicator {
background-color: #4f46e5;
height: 100%;
transition: transform 0.2s ease;
}
Особенности использования:
value должно строго соответствовать диапазону
0–100 для корректного отображения.Неопределенный прогресс используется, когда заранее невозможно оценить процент выполнения задачи. В Radix UI он реализуется с помощью анимации индикатора, который движется бесконечно, создавая эффект «загрузка продолжается».
Пример использования:
import * as Progress from '@radix-ui/react-progress';
function IndeterminateProgress() {
return (
);
}
CSS-анимация для неопределенного прогресса:
.indeterminate {
width: 30%;
background-color: #4f46e5;
height: 100%;
animation: indeterminate 1.5s infinite;
}
@keyframes indeterminate {
0% {
transform: translateX(-100%);
}
50% {
transform: translateX(50%);
}
100% {
transform: translateX(100%);
}
}
Особенности использования:
| Характеристика | Определенный прогресс | Неопределенный прогресс |
|---|---|---|
| Известность времени задачи | Да | Нет |
| Визуализация | Процентное заполнение | Бесконечная анимация |
| Подходит для | Загрузка файлов, вычисления | Асинхронные запросы |
| Анимация | Плавное изменение значения | Циклическое движение |
Атрибут value |
Обязателен | Не используется |
loading → complete) следует плавно заменить
индикатор, чтобы избежать резких скачков.width: 100% и
относительные единицы, чтобы прогресс корректно масштабировался на
разных устройствах.Radix UI позволяет легко кастомизировать прогресс:
border-radius или создать закругленные концы.height контейнера и индикатора.Использование Radix UI для прогресса обеспечивает доступность, корректное взаимодействие с клавиатурой и поддержку ARIA-атрибутов, что важно для пользователей с ограниченными возможностями.