加载
TechUI 提供了一套高性能的 Loading 加载系统。与传统的 GIF 或 CSS 动画不同,TechUI 的加载图标源自 WebAssembly (WASM) 模块内置的 SVG 序列。
系统采用 CSS Mask (遮罩) 技术进行渲染,这意味着所有的加载图标都能自动适配当前的主题颜色,无需额外的图片资源。
核心组件
加载系统包含两个核心组件:
- TuiLoadingFull: 全屏/全局加载遮罩,通常用于页面跳转或应用初始化。支持组件式和函数式两种调用方式。
- TuiLoadingArea: 局部/容器加载遮罩,通常用于表格、卡片等特定区域的数据刷新。
全局配置
所有的加载样式默认通过全局配置 $spinnerConfig 进行管理。您可以在应用初始化时指定默认的加载动画类型和尺寸。
配置结构
javascript
// 在 Global Config 或 TuiProvider 中
const spinnerConfig = {
// 全屏加载配置
full: {
name: "blocksA", // 动画名称 (见下方列表)
size: 100 // 尺寸 (px)
},
// 局部加载配置
area: {
name: "pointA", // 动画名称
size: 40 // 尺寸 (px)
}
};动态修改
在应用运行时,通过修改配置并调用 initSpinner 方法可实时更新加载动画样式。
javascript
import { inject } from 'vue';
const { $tState, initSpinner } = inject('$global');
const changeSpinnerStyle = () => {
$tState.spinnerConfig.full.name = "ringA";
initSpinner($tState.spinnerConfig);
};全屏加载 LoadingFull
全局方法调用 (推荐)
在业务逻辑(如 API 请求拦截器、路由守卫)中,推荐使用全局方法 $tLoading。
javascript
import { inject } from 'vue';
const { $tLoading, $tLoadingClose } = inject('$global');
const handleFetch = async () => {
// 开启加载
$tLoading({
desc: "正在同步数据...", // 加载文案
appendTo: "#app", // 指定挂载节点
visible: true
});
try {
await api.getData();
} finally {
// 关闭加载
$tLoadingClose();
}
};组件方式调用
在 Vue 模板中,也可以直接使用组件形式。
html
<template>
<TuiLoadingFull
:visible="isLoading"
desc="系统初始化中"
:zIndex="9999"
/>
</template>局部加载 LoadingArea
局部加载主要以组件形式存在,用于覆盖父容器。
注意:使用 <TuiLoadingArea> 时,其父容器(Parent Element)的 CSS position 属性必须设置为 relative、absolute 或 fixed,否则遮罩将无法正确覆盖区域。
html
<template>
<div class="data-card" style="position: relative; min-height: 200px;">
<DataList />
<TuiLoadingArea
:visible="isCardLoading"
:mask="true"
:size="50"
/>
</div>
</template>动画图形库
系统内置了 19 种 SVG 动画图形,您可以在配置的 name 字段中使用以下 Key 值:
条形与方块
barsA,barsB,barsCblocksA,blocksB,blocksC
点阵与时钟
pointA,pointB,pointCclock(时钟倒计时)
脉冲与圆环
pulseDotA,pulseDotB,pulseDotCpulseRingA,pulseRingB,pulseRingCringA,ringB,ringC
API 参考
TuiLoadingFull (全屏加载)
支持组件属性或 $tLoading(options) 参数对象。
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| visible | Boolean | true | 控制显示与隐藏。 |
| desc | String | "" | 加载图标下方的描述文字。 |
| appendTo | String | null | 指定挂载的目标 DOM 选择器(如 #app, body)。仅在动态渲染模式下有效。 |
| dynamicRender | Boolean | false | 是否开启动态渲染模式(通常由函数调用内部处理)。 |
| size | Number | - | 覆盖全局配置的图标尺寸 (px)。 |
| color | String | - | 覆盖默认颜色。 |
| zIndex | Number | - | 自定义层级 (z-index)。 |
| update | Boolean | - | 设置为 true 可强制更新/重绘动画组件。 |
注:tuiService, tMask, tMaskClose, destroy 为内部依赖注入参数,通常无需手动传递。
TuiLoadingArea (局部加载)
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| visible | Boolean | true | 控制显示与隐藏。 |
| mask | Boolean | - | 是否显示背景模糊/变暗遮罩层。 |
| size | Number | - | 覆盖全局配置的图标尺寸 (px)。 |
| color | String | - | 覆盖默认颜色。 |
| zIndex | Number | - | 自定义层级 (z-index)。 |
| update | Boolean | - | 设置为 true 可强制更新/重绘动画组件。 |
全局方法
$tLoading(options): 创建并显示全屏加载。options参数同TuiLoadingFull属性。$tLoadingClose(): 关闭当前激活的全屏加载实例。
致谢
n3r4zzurr0
Github
本组件中核心的 SVG 动态图形资产,源自开源项目 svg-spinners !
在此,向作者 n3r4zzurr0 致以诚挚的谢意与敬意!