# 加载动画
fx67ll-loading 是一个内置 26 款 纯 CSS 加载动效的组件,通过统一的 type 属性切换动效,并支持颜色、大小、动画时长、全屏遮罩、提示文字、延迟显示、v-model 显隐控制等丰富的配置。
所有动效均为纯 CSS 实现,无任何 JS 动画依赖,性能良好且可轻松定制。
# 基础示例
最简单的用法,通过 type 选择动效,color 设置颜色。
# 所有类型一览
下方网格展示了全部 26 款加载动效,鼠标悬浮卡片可查看 type 名称。点击卡片可切换深浅背景以查看不同颜色下的效果。
说明:
ball-pulse(三球依次脉冲)与ball-pulse-double(两球交替脉冲)视觉效果不同,分别对应不同的实现,命名上以-double后缀区分。ball-scale为单圆放大淡出动效。
# 大小调节
size 属性支持四档预设 sm/md/lg/xl,也支持直接传入数字倍数(如 1.5 表示 1.5 倍)。
# 颜色自定义
color 属性接收十六进制颜色值(3 位或 6 位),所有 26 款动效均支持动态换色。
# 动画速度
duration 属性(单位:秒)可覆盖各动效的默认时长,数值越小动画越快。不传时使用各款默认时长。
# 全屏加载
设置 fullscreen 开启全屏遮罩模式,常用于页面级或请求级加载。可配合 background(遮罩背景色)、mask(是否显示半透明遮罩)、tip(提示文字)、zIndex(层级)使用。
# 延迟显示
delay 属性(单位:毫秒)可延迟显示 loading,避免短时间请求导致的闪烁。设为 0(默认)则立即显示。
# v-model 控制
组件支持 v-model 双向绑定控制显隐,适用于局部加载场景。
# 快速上手
<!-- 基础用法 -->
<fx67ll-loading type="ball-pulse" color="#42b983" />
<!-- 指定大小 -->
<fx67ll-loading type="pacman" color="#f6d860" size="lg" />
<!-- 全屏加载 -->
<fx67ll-loading v-model="loading" fullscreen type="ball-spin" tip="加载中" background="#20232a" />
<!-- 延迟显示 -->
<fx67ll-loading v-model="loading" fullscreen :delay="500" type="ball-clip-rotate" />
# 属性说明
| 参数 | 说明 | 类型 | 可选值 | 默认值 |
|---|---|---|---|---|
| type | loader 类型,决定渲染哪种动效 | String | 见下方「所有类型」表格 | ball-pulse |
| color | loader 颜色,十六进制颜色代码 | String | - | #42b983 |
| size | loader 大小,支持四档预设或数字倍数 | String / Number | sm / md / lg / xl 或数字 | md |
| duration | 单次动画时长(秒),不传使用各款默认 | Number | - | null |
| fullscreen | 是否全屏遮罩模式 | Boolean | - | false |
| background | 全屏遮罩背景色,仅 fullscreen 生效 | String | - | ''(默认半透明遮罩) |
| mask | 全屏时是否显示半透明遮罩层 | Boolean | - | true |
| zIndex | 全屏遮罩层级 | String / Number | - | 9999 |
| tip | loading 下方提示文字 | String | - | '' |
| tipColor | 提示文字颜色,为空时跟随 color | String | - | '' |
| delay | 延迟显示时间(毫秒),0 表示立即显示 | Number | - | 0 |
| value | v-model 绑定值,控制显隐 | Boolean | - | true |
| customClass | 自定义类名透传 | String | - | '' |
# 所有类型
组件共内置 26 款动效,完整 type 列表如下:
| type | 效果描述 |
|---|---|
| ball-climbing-dot | 小球沿阶梯向上攀爬 |
| ball-clip-rotate | 半圆环不断旋转 |
| ball-fall | 三个小球依次坠落 |
| ball-newton-cradle | 牛顿摆,两端球轮流摆动 |
| ball-pulse | 三个圆球依次脉冲缩放 |
| ball-running-dots | 一串小点循环奔跑 |
| ball-scale-pulse | 两圆同心放大缩小涟漪 |
| ball-scale | 单圆放大并淡出 |
| ball-spin-clockwise | 八点环阵顺时针闪烁 |
| ball-spin-rotate | 两球绕中心旋转配合缩放 |
| ball-spin | 八点环阵依次淡入淡出(iOS 风) |
| line-scale | 五条竖线按节奏缩放(音频条) |
| pacman | 吃豆人造型,边吃豆边追逐 |
| square-jelly-box | 方块翻滚弹跳带阴影联动 |
| square-loader | 方框旋转并被内部填充 |
| timer | 钟表样式,时针分针转动 |
| circle | 圆环单段缺口持续旋转 |
| circle-side | 半透明圆环加一段高亮 |
| arrow-circle | 圆环两端箭头反向旋转 |
| ball-circle | 两圆球交替沿四角移动 |
| rectangle | 三根条形依次跳起(音柱) |
| heart | 心形放大缩小 |
| ball-rotate | 三圆球绕中心旋转并缩放 |
| ball-pulse-double | 左右两圆球交替脉冲 |
| jumping | 两方块跳起翻转(3D 透视) |
| satellite | 卫星围绕中心月球旋转 |
# 样式定制
组件通过 CSS 自定义属性实现主题化,可在父级覆盖这些变量进行定制:
| CSS 变量 | 说明 | 默认值 |
|---|---|---|
| --loader-color | loader 颜色 | 由 color 属性注入 |
| --loader-scale | 缩放倍数(数字型 size) | 由 size 属性注入 |
| --loader-duration | 动画时长覆盖 | 各款默认 |
| --loader-bg | 全屏遮罩背景色 | 由 background 属性注入 |
| --loader-zindex | 全屏遮罩层级 | 由 zIndex 属性注入 |
| --loader-tip-color | 提示文字颜色 | 跟随 color |
通过 customClass 可以为组件追加自定义类名,结合上述变量可实现深度定制:
<fx67ll-loading type="ball-pulse" color="#42b983" custom-class="my-loading" />
.my-loading {
/* 覆盖缩放 */
--loader-scale: 1.2;
}
部分动效的大小通过修饰类精确控制每个子元素的宽高与间距,与
--loader-scale变量相互独立;另一部分动效则统一通过--loader-scale整体缩放。
# 常见问题
# Q: 为什么不同 type 设置相同 size 时视觉效果略有差异?
不同动效的尺寸控制方式不同:部分动效使用修饰类精确调整每个子元素的宽高和间距,另一部分则通过 transform: scale() 整体缩放。两种方式都能正常工作,视觉上略有差异属正常现象。如需完全统一的缩放表现,可传入数字型 size(如 :size="1.5"),此时统一走 transform: scale()。
# Q: 全屏加载为什么没有遮罩背景?
请检查 mask 属性是否被设为 false(默认 true)。若设置了 background 属性,则会使用该颜色作为遮罩背景并覆盖默认的半透明遮罩。
# Q: delay 属性有什么用?
当请求很快完成时(如 300ms),loading 一闪而过会造成视觉闪烁。设置 delay="500" 后,只有加载持续超过 500ms 才会显示 loading,短请求不会出现闪烁。
# Q: 如何在局部容器内显示 loading?
不开启 fullscreen,将 <fx67ll-loading> 放入一个 position: relative 的父容器即可作为局部 loading 使用。配合 v-model 控制显隐。
# 版本说明
# 0.6.0
- 首版加载动画组件,内置 26 款 纯 CSS 内联加载动效
- 支持
type/color/size/duration/fullscreen/background/mask/tip/tipColor/delay/v-model/customClass等属性
# 浏览器兼容性
所有动效基于 CSS3 @keyframes 与 transform 实现,兼容所有现代浏览器(Chrome / Firefox / Safari / Edge),不支持 IE9 及以下。
# 感谢使用
我是 fx67ll.com (opens new window),如果您发现本组件有什么错误,欢迎提交issue,感谢您的阅读!
如果您喜欢这个组件,欢迎访问 本组件github仓库地址 (opens new window),为我点一颗 Star,Thanks~ 😃
转发请注明参考地址,非常感谢!!!