电池充电加载动画(Battery Charging Loader 电量递增)
电池充电加载动画,电量从 0% 到 100% 持续递增并实时显示百分比,闪电图标脉冲呼吸,支持三套配色、调速与暂停,JS 驱动轻量可控,适合下载、充电、资源加载场景。
效果演示(真实可交互)
电池外壳内绿色电量从 0% 匀速涨到 100% 后自动清零循环,下方的百分比数字与液面高度严格同步,闪电符号保持呼吸脉动。绿 / 蓝 / 粉三套配色,速度 0.3× - 3× 可调。
⚡
0%
正在充电…
配色
速度 1.0×
完整代码
HTML 结构:
<div class="bc-battery">
<span class="bc-cap"></span> <!-- 电池正极凸起 -->
<span class="bc-shell"> <!-- 电池外壳 -->
<span class="bc-fill"></span> <!-- 电量液面 -->
<span class="bc-bolt">⚡</span> <!-- 闪电图标 -->
</span>
</div>
<p class="bc-percent">0%</p>
CSS 核心:
.bc-shell {
position: relative; width: 110px; height: 54px;
border-radius: 12px; border: 3px solid #cfd7ea;
background: #eef1f9; overflow: hidden;
}
.bc-fill {
position: absolute; left: 0; bottom: 0; width: 100%; height: 0%;
background: linear-gradient(180deg, #7be0a5, #34c48b);
transition: height .16s linear; /* 液面平滑上升 */
}
.bc-bolt {
position: absolute; inset: 0; display: grid; place-items: center;
font-size: 22px; color: #fff;
animation: bc-bolt-pulse 1s ease-in-out infinite;
}
@keyframes bc-bolt-pulse { 0%, 100% { transform: scale(1); opacity: .85; }
50% { transform: scale(1.22); opacity: 1; } }
JS 核心(电量递增):
let pct = 0, timer = null;
function tick() {
pct = (pct + 1) % 101; // 0→100 循环
fill.style.height = pct + '%'; // 液面与数字同步
percentEl.textContent = pct + '%';
}
timer = setInterval(tick, 260 / speed); // speed 为倍率
参数说明
| 参数 | 位置 | 说明 |
|---|---|---|
| 递增步长 | pct + 1 | 每次 +1%,改大步长(如 +5)可跳段显示 |
| 刷新间隔 | 260 / speed | 毫秒,控制充电速度;260ms 时约 26s 充满 |
| 主色/次色 | --bc-color / --bc-color2 | 液面渐变上下两色,三套主题由此切换 |
| 外壳描边 | border: 3px solid #cfd7ea | 加粗描边更像真实电池轮廓 |
| 闪电动画 | bc-bolt-pulse | 呼吸节奏与充电速度独立,可自行调整 |
| 液面过渡 | transition: height .16s | 过渡时长需小于刷新间隔,避免拖影 |
兼容性与性能
- 电量递增由
setInterval驱动,仅修改height一个样式属性,配合 CSS 过渡平滑渲染 - 液面动画属于轻量重绘,可接受;若追求极致性能可改用
transform: scaleY并配合transform-origin: bottom - 兼容 Chrome / Firefox / Safari / Edge 最新版;
grid布局需求 Chrome 57+,移动端一致 - 定时器在页面不可见时可用
document.visibilitychange暂停,节省电量 - 适合下载进度、资源预加载、上传队列等”有明确上限(100%)“的等待场景,百分比数字让等待时间可预期
常见问题
Q: 电量到 100% 后想停住而不是循环怎么办? 在 tick 里判断 pct >= 100 时 clearInterval(timer),并给外壳加一个”充满”样式(如闪电换成对勾 ✓)即可。
Q: 液面有拖影/不平滑? 确认 transition 时长小于 setInterval 间隔;间隔改小(如 100ms)但过渡保持 0.1s,会更跟手。
Q: 想显示真实下载百分比? 把 tick 里的自增逻辑换成外部传入的进度值,如监听 XMLHttpRequest 的 progress 事件,其余渲染逻辑不变。
Q: 为什么闪电图标盖住了电量颜色? 给 .bc-bolt 加 text-shadow 并降低 opacity,或在液面上层叠半透明高光(.bc-fill::before)让闪电层更有层次。
许可与来源
- 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
- 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
- 首次发布: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(缓动曲线)等属性即可,代码中有注释说明。