Компонент QSpinner в библиотеке Quasar используется для отображения индикаторов загрузки. Он позволяет визуально информировать пользователя о процессе выполнения асинхронных операций. QSpinner можно применять как самостоятельный элемент или в составе других компонентов, таких как QBtn, QDialog, QCard, обеспечивая гибкую кастомизацию.
Каждый спиннер основан на SVG-анимации или CSS-анимации в зависимости от выбранного типа, что обеспечивает плавность и производительность.
Импортировать спиннер можно следующим образом:
import { QSpinner } from 'quasar'
Простейший пример использования:
<q-spinner color="primary" size="50px" />
Параметры:
color – задает цвет спиннера. Можно использовать
стандартные цвета Quasar (primary, secondary,
accent и т.д.).size – диаметр спиннера. Принимает значения в пикселях
(px) или относительные единицы (em,
rem).thickness – толщина линии спиннера, например
4px.indeterminate – булево значение, указывающее, что
спиннер показывает неопределенный процесс (анимированное вращение).Quasar предоставляет несколько встроенных вариантов спиннеров, каждый из которых имеет собственный стиль анимации:
Выбор спиннера зависит от визуального стиля приложения и контекста загрузки.
Спиннеры Quasar позволяют гибко управлять внешним видом с помощью CSS-переменных и пропсов:
<q-spinner-dots
size="60px"
color="accent"
:thickness="6"
class="my-spinner"
/>
.my-spinner {
--q-spinner-color: #ff5722;
--q-spinner-size: 70px;
}
--q-spinner-color – изменяет цвет спиннера через
CSS.--q-spinner-size – позволяет контролировать размер без
изменения пропса size.Часто спиннер нужен только во время загрузки данных. Для этого
применяется условный рендеринг через v-if или
v-show:
<template>
<div>
<q-spinner-bars v-if="loading" color="primary" size="40px" />
<div v-else>
Данные загружены
</div>
</div>
</template>
<script>
export default {
data() {
return {
loading: true
}
},
mounted() {
setTimeout(() => this.loading = false, 3000)
}
}
</script>
Спиннеры часто применяются внутри модальных окон и карточек для отображения состояния загрузки контента:
<q-dialog v-model="dialog">
<q-card style="min-width: 300px; min-height: 150px;">
<q-card-section class="row justify-center items-center">
<q-spinner-hourglass color="secondary" size="50px" />
</q-card-section>
</q-card>
</q-dialog>
С помощью CSS-переменной --q-spinner-speed можно менять
скорость вращения или анимации спиннера:
.q-spinner-dots {
--q-spinner-speed: 1.5s;
}
Значение указывается в секундах (s) или миллисекундах
(ms), что позволяет адаптировать анимацию под UX
приложения.
QSpinner часто используется в кнопках для отображения процесса действия:
<q-btn
:loading="loading"
label="Сохранить"
color="primary"
@click="saveData"
/>
Проп loading автоматически вставляет стандартный спиннер
внутри кнопки, управляя его видимостью и блокируя повторные нажатия.
Все спиннеры Quasar масштабируются пропсами size и
thickness, а также адаптируются к темной и светлой темам
через глобальные переменные цвета ($primary,
$accent). Это позволяет создавать единый визуальный язык
для всех компонентов интерфейса.
Можно создавать свои спиннеры, используя QSpinner как
базовый компонент и подключая собственные SVG-анимации или
CSS-анимации:
<q-spinner
class="custom-spinner"
size="80px"
color="purple"
/>
<style>
.custom-spinner svg circle {
stroke-dasharray: 150;
stroke-dashoffset: 0;
animation: spin 2s linear infinite;
}
@keyframes spin {
100% { transform: rotate(360deg); }
}
</style>
Такой подход позволяет реализовать уникальные визуальные эффекты, не ограничиваясь стандартными вариантами.
Эти возможности делают QSpinner универсальным инструментом для визуализации процессов в интерфейсе, обеспечивая плавность и эстетичность анимаций при минимальной нагрузке на приложение.