hx-indicator
Указывает элемент индикатора загрузки
Атрибут hx-indicator выбирает элементы, которым во время запросов присваивается класс состояния запроса.
По умолчанию htmx добавляет .htmx-request. Используйте его для отображения индикаторов загрузки.
Синтаксис
<button hx-post="/submit" hx-indicator="#spinner">Submit</button>
Задайте CSS-селектор, чтобы выбрать элементы индикатора.
Используйте closest SELECTOR, чтобы выбрать сам элемент или ближайший подходящий элемент-предок.
Пример со значком загрузки рядом с кнопкой:
<div>
<button hx-post="/example" hx-indicator="#spinner">
Post It!
</button>
<img id="spinner" class="htmx-indicator" src="/img/bars.svg" alt="Loading..."/>
</div> Используйте модификатор :append, чтобы сохранить индикаторы родительских элементов и добавить другие селекторы (родительский элемент должен предоставлять своё значение через :inherited):
<main hx-indicator:inherited="#global-indicator">
...
<button hx-post="/example" hx-indicator:append="#spinner">
Post It!
</button>
<img id="spinner" class="htmx-indicator" src="/img/bars.svg" alt="Loading..."/>
</main> Во время выполнения запроса к изображению #spinner будет добавлен класс htmx-request. У изображения также есть класс htmx-indicator, который задаёт переход прозрачности и отображает значок загрузки:
.htmx-indicator {
opacity: 0;
visibility: hidden;
}
.htmx-request .htmx-indicator,
.htmx-request.htmx-indicator {
opacity: 1;
visibility: visible;
transition: opacity 200ms ease-in;
} Этот CSS htmx-indicator по умолчанию также задаёт скрытую видимость для повышения доступности для программ чтения с экрана и обеспечивает быстрое появление за счёт изменения прозрачности.
Если вы предпочитаете другой эффект отображения значка загрузки, можно определить и использовать собственный CSS для индикатора. Вот пример, в котором вместо прозрачности используется display (обратите внимание: мы используем my-indicator вместо htmx-indicator):
.my-indicator{
display:none;
}
.htmx-request .my-indicator,
.htmx-request.my-indicator{
display:inline;
} Обратите внимание, что целью селектора hx-indicator не обязательно должен быть именно тот элемент, который нужно показать: это может быть любой элемент в иерархии родителей индикатора.
Наконец, обратите внимание, что по умолчанию класс htmx-request добавляется к элементу, инициирующему запрос. Поэтому можно поместить индикатор внутрь этого элемента и не указывать его явно с помощью атрибута hx-indicator:
<button hx-post="/example">
Post It!
<img class="htmx-indicator" src="/img/bars.svg" alt="Loading..."/>
</button> Задержка отображения индикатора
При быстрых запросах кратковременное появление значка загрузки может выглядеть дёрганым.
Это можно исправить, добавив задержку к CSS-переходу, который отображает индикатор:
.htmx-indicator {
opacity: 0;
visibility: hidden;
}
.htmx-request .htmx-indicator,
.htmx-request.htmx-indicator {
opacity: 1;
visibility: visible;
transition: opacity 200ms ease-in 200ms; /* fade duration, then delay */
} Демонстрация
Здесь показано, как может выглядеть значок загрузки в такой ситуации:
<button class="btn" classes="toggle htmx-request:3s">
Post It!
<img class="htmx-indicator" src="/img/bars.svg" alt="Loading..."/>
</button> Примечания
- Если индикатор явно не задан, класс
htmx-requestбудет добавлен к элементу, инициирующему запрос - Если вы хотите использовать собственный CSS, сохранив имя класса
htmx-indicator, необходимо отключитьincludeIndicatorCSS. См. раздел Настройка htmx. Проще всего добавить это в<head>HTML-документа:
<meta name="htmx-config" content='{"includeIndicatorCSS": false}'> - Если вы хотите использовать собственный CSS и полностью отключить встроенные стили индикатора, задайте для
includeIndicatorCSSзначениеfalseи разместите собственный CSS-файл с копией нужного вам стиляhtmx-indicator, приведённого выше
Licensed under the Zero-Clause BSD License.
https://four.htmx.org/reference/attributes/hx-indicator/