Spinner
<sf-spinner> показывает, что работа идёт, но сколько ещё ждать —
неизвестно: запрос к серверу, подготовка отчёта. Элемент строится на классах
компонента Спиннер. Если доля
выполненного известна, берите
Progress Bar, если известна
раскладка будущего содержимого — Skeleton.
Пример
Применение
Длительность анимации
Задавайте infinite для любого ожидания неизвестной длины: с ним анимация
повторяется, пока спиннер на странице. Без него анимация проходит один цикл
и останавливается.
Подпись
label — видимая подпись под изображением: что именно происходит,
«Обновляем список». Без label подпись — «Загрузка…» на русской странице и
«Loading…» на остальных; пустое значение тоже заменяется этой подписью,
поэтому спиннер <sf-spinner> всегда подписан.
Вид и размер
kind — вид: arc — дуга, бегущая по кольцу (по умолчанию), dots —
кольцо точек с волной яркости. Держите один вид во всём интерфейсе. size —
ступень 1/2, 1, 2 или 3: 1/2 — внутри кнопки или поля, 2 и 3 —
для целой области.
Тонкая настройка: dots — число точек (от 3 до 32), filled — сколько из
них яркие, direction — clockwise или counterclockwise, width,
height, stroke-width и dot-radius — размеры в пикселях. Изображение
перестраивается при смене атрибутов само; refreshSpinner() перестраивает
его по текущим атрибутам принудительно.
const spinner = await SF.createAsync('spinner', {
infinite: true,
announce: true,
label: 'Готовим отчёт',
});
report.setAttribute('aria-busy', 'true');
report.append(spinner);
Доступность
- Подпись читается как обычный текст. Чтобы экранный диктор объявил её при
появлении спиннера, задайте
announce: элемент получитrole="status"иaria-live="polite". Объявляйте одно ожидание на область, а не каждый спиннер в списке. - Области, которая ждёт данных, задайте
aria-busy="true"и уберите атрибут, когда загрузка закончилась; спиннер после этого удалите. - Спиннер не получает фокус. Не ставьте его вместо кнопки на время запроса: отключите кнопку и покажите спиннер рядом или внутри неё.
- При системной настройке уменьшения движения анимация останавливается, а изображение остаётся видимым.
Справочник API
Раздел собран из манифеста компонента выпуска ui-106d5901f8c3 и обновляется вместе с выпуском. Чтобы исправить описание, исправьте манифест.
Каждому атрибуту соответствует свойство элемента с тем же именем в camelCase: search-placeholder — searchPlaceholder. Свойство атрибута template называется templateName.
| Тег | <sf-spinner> |
| Назначение | Индикатор неопределённого ожидания в виде дуги или точек с необязательным вежливым (polite) объявлением статуса и анимацией Framework. |
| Контракт | smart.spinner, версия 1.0.0 |
| Поставка | выпуск Framework ui-106d5901f8c3 |
| Жизненный цикл | экспериментальный: API может меняться между выпусками |
| Готовность | описан: манифест и сценарий есть, продуктовой приёмки нет |
| Заготовка до прихода кода | нет: атрибут data-sf-skeleton не пишется; своего скелетона при загрузке данных нет (Заготовка до прихода кода) |
Атрибуты
size—string, по умолчанию1, значения:1/2,1,2,3.width—string, по умолчанию пусто.height—string, по умолчанию пусто.label—string, по умолчанию пусто. Пусто — текст на языке страницы (по-английски «Loading…»).kind—string, по умолчаниюarc, значения:arc,dots. Вид спиннера: дуга или ряд точек.dots—string, по умолчанию16, значения: шаблон^(?:[3-9]|[12][0-9]|3[0-2])$.filled—string, по умолчанию6, значения: шаблон^(?:[1-9]|[12][0-9]|3[0-2])$.stroke-width—string, по умолчанию пусто.dot-radius—string, по умолчанию пусто.infinite—boolean, по умолчаниюfalse.announce—boolean, по умолчаниюfalse.direction—string, по умолчаниюclockwise, значения:clockwise,counterclockwise.root-class—string, по умолчанию пусто.
Прежние имена:
| Имя | Прежнее имя | Состояние | Убирается после |
|---|---|---|---|
kind |
variant |
работает, отмечается в SF.deprecations |
2026-12-01 |
Методы
getSpinnerRoot()— возвращаетobject|null. Возвращает внутренний корень индикатора загрузки (.sf-loader-container) или null до отрисовки.refreshSpinner()— возвращаетobject. Перерисовывает привязанный корень индикатора загрузки по его текущей конфигурации; до привязки ничего не делает.
События
Своих событий нет; общие события базового элемента перечислены в главе Жизненный цикл → Этапы.
Доступность
- Роль:
status, если announce равно true и label не пуст; иначе без роли виджета. - Доступное имя: рекомендуется.
- Фокус: Спиннер не интерактивен и никогда не попадает в порядок фокуса.
Минимальная разметка
<sf-spinner infinite announce label="Loading"></sf-spinner>
Источник
simai/ui@106d5901f8c3b4f23131ce0e7ede5dbd8abfe4f4:distr/smart/spinnersimai/ui@106d5901f8c3b4f23131ce0e7ede5dbd8abfe4f4:distr/rule/rule.json#name=cl-spinner
См. также
- Спиннер — спиннер на классах.
- Progress Bar — ход процесса с известной долей.
- Skeleton — место будущего содержимого.