弹跳点加载动画(Bouncing Dots Loader 纯 CSS 实现)
纯 CSS 弹跳点加载动画,5 个圆点错落弹跳自带阴影与透明度变化,支持速度调节、暂停与三套配色,零依赖复制即用,适合页面加载与按钮提交等待场景。
效果演示(真实可交互)
拖动「速度」滑块可实时改变弹跳节奏(0.3× - 2.5×);点击「暂停」可冻结动画,便于在浏览器里检查样式;三套配色(蓝 / 橙 / 绿)一键切换,观察不同品牌色下的表现。
正在加载,请稍候…
配色
速度 1.0×
完整代码
HTML 结构:
<div class="bd-dots">
<i></i><i></i><i></i><i></i><i></i>
</div>
CSS 核心(弹跳动画 + 错落延迟):
.bd-dots {
--bd-dur: 1s; /* 一个完整弹跳周期 */
--bd-color: #6c8cff; /* 圆点主色 */
display: flex; gap: 10px;
}
.bd-dots i {
width: 16px; height: 16px; border-radius: 50%;
background: var(--bd-color);
animation: bd-bounce var(--bd-dur) ease-in-out infinite;
}
/* 每个点错开 0.1 个周期,形成波浪 */
.bd-dots i:nth-child(1) { animation-delay: calc(var(--bd-dur) * -0.4); }
.bd-dots i:nth-child(2) { animation-delay: calc(var(--bd-dur) * -0.3); }
.bd-dots i:nth-child(3) { animation-delay: calc(var(--bd-dur) * -0.2); }
.bd-dots i:nth-child(4) { animation-delay: calc(var(--bd-dur) * -0.1); }
@keyframes bd-bounce {
0%, 60%, 100% { transform: translateY(0) scale(1); opacity: .45; }
30% { transform: translateY(-26px) scale(1.12); opacity: 1; }
}
JS(可选,速度与暂停控制):
// 速度:周期 = 基准 / 倍率
stage.style.setProperty('--bd-dur', (1 / speed).toFixed(2) + 's');
// 暂停:给容器加类,统一冻结所有圆点
dots.classList.toggle('paused', paused); // .paused i { animation-play-state: paused }
参数说明
| 参数 | 位置 | 说明 |
|---|---|---|
| 弹跳周期 | --bd-dur | 一个完整弹跳的时长,默认 1s,数字越大越慢 |
| 圆点颜色 | --bd-color | 通过 CSS 变量换色,也可直接改 background |
| 圆点数量 | HTML 中 <i> 个数 | 3-7 个效果都自然,超过 7 个显拥挤 |
| 弹跳高度 | translateY(-26px) | 数值越大跳得越高,注意留足容器高度 |
| 错落间隔 | animation-delay | 建议步进为周期的 0.1 倍,波浪感最佳 |
| 高光/阴影 | box-shadow | 用 color-mix 跟随主色,增强立体感 |
兼容性与性能
- 动画只使用
transform与opacity,全程走 GPU 合成层,不触发重排重绘,60fps 流畅 - 全部语法兼容 Chrome / Firefox / Safari / Edge 最新版;
color-mix为渐进增强,旧浏览器仅失去阴影颜色同步,不影响动画本身 - 依赖
prefers-reduced-motion的站点可在媒体查询中把动画时长设长或直接隐藏 - 5 个圆点仅 5 个合成层,性能开销可忽略;适合按钮加载态、首屏等待、图片懒加载占位等场景
常见问题
Q: 想让弹跳方向变成左右横跳怎么办? 把 keyframes 里的 translateY 换成 translateX 即可,其余逻辑完全不用动,错落延迟同样生效。
Q: 加载完成后怎么移除动画? 直接删除容器节点或加 display: none;如果希望平滑淡出,可先给容器加 opacity: 0 过渡,300ms 后再移除。
Q: 圆点在弱网/慢速环境还跳得这么快,会不会显得很急? 建议把默认周期设为 1.2s 左右,并在数据到达前的骨架阶段使用;也可以在切换页面时用 JS 统一放大 --bd-dur。
Q: 可以商用吗? 可以。本组件为粤喵自研,MIT 友好的免费商用协议,无需署名,改色改尺寸随意。
许可与来源
- 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
- 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
- 首次发布:2026-09-01 · 最近更新:2026-09-01
- 修改日志:2026-09-01 首次发布;2026-09-13 补充许可证与来源标注、复制按钮说明与法务页入口
- 纠错:联系页面 / min@cactus.asia,2 个工作日内核实处理
常见问题
这个组件可以商用吗?
可以。本组件为粤喵自研原创,可免费用于个人和商业项目,无需署名。
浏览器兼容性如何?
支持所有现代浏览器(Chrome / Firefox / Safari / Edge 最新版本)。旧版 IE 不支持 CSS 动画相关特性。
怎么修改动画参数?
直接调整 CSS 中的 animation-duration(时长)、animation-timing-function(缓动曲线)等属性即可,代码中有注释说明。