Спиннер
Спиннер показывает, что операция выполняется, когда процент завершения неизвестен. Если процент известен, берите индикатор прогресса; для формы или карточки с предсказуемой геометрией лучше подходит скелетон.
Пример
Разметка
Минимальная разметка — один пустой блок sf-loader-container с атрибутами.
Изображение и подпись скрипт компонента достраивает сам: часть
sf-loader--loading-indicator или sf-loader--circles с SVG и подпись
sf-loader--text.
data-infinite="true"повторяет анимацию, пока спиннер на странице. Без него анимация проходит один цикл и останавливается, поэтому для ожидания неизвестной длительности атрибут обязателен.data-label— видимая подпись под изображением. Пустойdata-labelили его отсутствие скрывает спиннер от экранного диктора.- Блок выравнивает содержимое по центру своей ширины.
- Тонкая настройка:
data-dots(число точек, от 3 до 32),data-filled(число ярких точек),data-direction(clockwiseилиcounterclockwise),data-width,data-height,data-stroke-widthиdata-dot-radiusв пикселях. Цвет задаёт переменная--sf-loader--color.
Варианты
Вид
data-variant="arc" рисует дугу, которая бежит по кольцу, — вид по
умолчанию. data-variant="dots" рисует кольцо точек, по которому бежит
волна яркости. Держите один вид во всём интерфейсе.
data-variant="arc"
data-variant="dots"
Размер
Четыре ступени — sf-loader--size-1/2, sf-loader--size-1,
sf-loader--size-2 и sf-loader--size-3 — меняют диаметр, толщину линии и
кегль подписи. Берите наименьший размер, который остаётся заметным: 1/2 —
внутри кнопки или поля, 2 и 3 — для целой области.
sf-loader--size-1/2
sf-loader--size-1
sf-loader--size-2
sf-loader--size-3
Доступность
- Область, которая ждёт данных, получает
aria-busy="true"до окончания загрузки. - Спиннер с подписью читается как обычный текст. Чтобы подпись объявлялась
при появлении, задайте
data-announce="true": скрипт поставитrole="status"иaria-live="polite". - Спиннер без подписи скрыт от экранного диктора; тогда о загрузке сообщает
соседний текст или
aria-busy. - При системной настройке уменьшения движения анимация останавливается, а дуга остаётся видимой неподвижной.
JavaScript
Скрипт компонента находит блоки .sf-loader-container при загрузке страницы
и в добавленной позже разметке. После изменения атрибутов перерисуйте
спиннер через SF.Spinner.render(element).
Компонент регистрирует класс Spinner. SF.Loader появляется к событию
sf-loader-init на window; SF.Loader.ready('Spinner', callback) передаёт
класс, когда он зарегистрирован.
const whenLoader = (run) => (window.SF?.Loader ? run() : window.addEventListener('sf-loader-init', run, {once: true}));
whenLoader(() => SF.Loader.ready('Spinner', (Spinner) => {
const spinner = new Spinner({param: {variant: 'dots', label: 'Загрузка', infinite: true}});
document.querySelector('#results').append(spinner.render());
}));
Параметры повторяют атрибуты: variant, label, infinite, announce,
dots, filled, direction, width, height, strokeWidth, dotRadius.
Подпись по умолчанию — Loading...; задайте свою. Без width и height
диаметр собранного спиннера задаёт класс размера; параметры задают его явно.
Событий компонент не отправляет.
Классы
| Что | Классы |
|---|---|
| Части | sf-loader-container, sf-loader-dot, sf-loader-dot--active, sf-loader-ring-accent, sf-loader-ring-filled, sf-loader-svg |
| Модификаторы | sf-loader--circles, sf-loader--infinite, sf-loader--loading-indicator, sf-loader--text |
| Размеры | sf-loader--size-1, sf-loader--size-1/2, sf-loader--size-2, sf-loader--size-3 |
Классы и переменные собраны из CSS выпуска и обновляются вместе с ним.
Переменные
Компонент читает свои переменные, а модификаторы задают им значения; таблица показывает, из чего складывается вид. Переменные компонента — его внутренняя проводка, а не поверхность настройки: их имена и устройство могут меняться. Вид проекта меняют общие токены, а глубокий вид Smart-компонента — его шаблон (см. Переменные компонента). Значение по умолчанию — из базового правила блока (.sf-loader); переменную без него задают только модификаторы.
| Переменная | По умолчанию | Задаёт |
|---|---|---|
--sf-loader--color |
не задана; задают модификаторы, например .sf-loader-container: var(--sf-primary) |
color |
--sf-loader-cycle-duration |
не задана; задают модификаторы, например .sf-loader-container: calc(var(--sf-duration-slow) * 6) |
animation |
--sf-loader-dot-duration |
не задана; задают модификаторы, например .sf-loader-container: calc(var(--sf-duration-slow) * 3) |
animation, animation-delay |
--sf-loader-stroke-width |
не задана; задают модификаторы, например .sf-loader-container: var(--sf-a6) |
stroke-width |
--sf-loader-svg-height |
не задана; задают модификаторы, например .sf-loader-container: var(--sf-d2) |
height |
--sf-loader-svg-width |
не задана; задают модификаторы, например .sf-loader-container: var(--sf-d2) |
width |
--sf-loader-text-gap |
не задана; задают модификаторы, например .sf-loader-container: var(--sf-space-1/2) |
gap |
--sf-loader-text-size |
не задана; задают модификаторы, например .sf-loader-container: var(--sf-text-size-1) |
font-size |
--sf-loader-track-color |
не задана; задают модификаторы, например .sf-loader-container: var(--sf-surface-container) |
stroke |