JavaScript原生实现进度条需三步:1. HTML构建容器与进度条结构;2. CSS设置容器宽高、隐藏溢出并为进度条添加宽度过渡;3. JS用setInterval定时更新style.width百分比值,达目标后clearInterval防泄漏。

用 JavaScript 实现进度条并定时更新宽度,核心是动态修改元素的 width 样式,并配合定时器(如 setInterval)逐步推进。不需要第三方库,原生 JS 就能轻松搞定。
1. HTML 结构:准备一个基础进度条容器
先写一个简单但语义清晰的结构:
其中 .progress-container 是外层固定宽高的盒子,.progress-bar 是内部随进度伸缩的条。
立即学习“Java免费学习笔记(深入)”;
2. CSS 样式:让进度条“可动”起来
关键点:设置容器为相对定位,进度条为绝对定位或 inline-block;宽度用百分比,高度/颜色按需定制:
.progress-container {
width: 300px;
height: 20px;
background-color: #e0e0e0;
border-radius: 10px;
overflow: hidden;
}
.progress-bar {
height: 100%;
background-color: #4caf50;
width: 0%;
transition: width 0.3s ease; /* 加个平滑过渡更自然 */
}
3. JavaScript:定时更新 width 值
获取 DOM 元素,设定目标值(比如 100%),再用 setInterval 每隔一段时间增加一点宽度:
const progressBar = document.getElementById('progressBar');
let currentWidth = 0;
const targetWidth = 100;
const step = 2; // 每次增加 2%
const intervalTime = 100; // 每 100ms 更新一次
const timer = setInterval(() => {
if (currentWidth >= targetWidth) {
clearInterval(timer);
return;
}
currentWidth += step;
progressBar.style.width = currentWidth + '%';
}, intervalTime);
- 用
style.width直接设百分比字符串(别漏掉 '%') - 记得在达到目标后调用
clearInterval,避免内存泄漏或超限 - 如果想支持暂停/重置,可以把 timer 变量暴露出来或封装成函数
4. 进阶小技巧(可选)
让进度条更实用:
- 把逻辑封装成函数:
startProgress(el, total = 100, duration = 3000),用时间而非步长控制速度 - 结合
fetch或上传事件,用实际加载量(如event.loaded / event.total)驱动 width,更真实 - 添加文字提示:
progressBar.textContent = Math.round(currentWidth) + '%'(注意兼容性,建议另加)
基本上就这些。不复杂但容易忽略细节——比如没清定时器、忘了加单位、CSS 没设 overflow: hidden 导致撑出边框。照着试一遍,马上就能跑起来。










