
本教程详细介绍了如何利用javascript动态更新html `
在现代Web应用中,进度条是向用户展示操作进度的重要UI组件。原生的HTML
HTML 结构
首先,我们需要一个基础的
在这个例子中,我们设置了 id="prog",初始 value="0",最大 max="100"。
CSS 样式与平滑过渡
为了让进度条在视觉上更加美观,并支持平滑过渡,我们需要对其进行样式设置。关键在于为进度条的填充部分(即进度值)应用 transition 属性。由于不同浏览器对
立即学习“前端免费学习笔记(深入)”;
/* 进度条容器的基础样式 */
.listening-progress {
position: relative;
top: -15px;
width: 120px;
margin-left: 9px;
background-color: #2a2b2f; /* 进度条未填充部分的背景色 */
border-radius: 9px;
height: 5px;
border: none;
}
/* progress 元素本身的通用样式 */
progress {
width: 120px;
margin-right: 12px;
background-color: #2a2b2f; /* 再次设置,确保兼容性 */
border-radius: 9px;
height: 5px;
border: none;
/* 针对 progress 元素本身的过渡效果,虽然主要动画由伪元素控制,但保留以防万一 */
-webkit-transition: width 0.5s;
-moz-transition: width 0.5s;
-ms-transition: width 0.5s;
-o-transition: width 0.5s;
transition: width 0.5s;
}
/* 针对 Firefox 浏览器的进度条填充部分 */
progress::-moz-progress-bar {
background: #fff; /* 进度条填充部分的背景色 */
border-radius: 9px;
transition: width 0.5s ease; /* 关键:为 width 属性变化添加过渡动画 */
}
/* 针对 WebKit 浏览器的进度条填充部分 */
progress::-webkit-progress-value {
background: #fff;
border-radius: 9px;
transition: width 0.5s ease;
}
/* 针对 progress 元素本身的颜色和圆角,并再次强调过渡 */
progress {
color: #fff; /* 这个 color 属性通常影响文本,但在某些情况下可能影响进度条颜色 */
border-radius: 9px;
transition: width 0.5s ease; /* 再次强调过渡 */
}
/* 其他相关样式,如时间显示等 */
.prog-time {
color: #fff;
font-size: 15px;
line-height: 16px;
border-radius: 9px;
}关键点解析:
- background-color:用于设置进度条未填充部分的背景色。
- progress::-moz-progress-bar 和 progress::-webkit-progress-value:这些伪元素是用来样式化进度条的“填充”部分的。
- transition: width 0.5s ease;:这是实现平滑动画的核心。当JavaScript改变 value 属性时,浏览器会重新计算填充部分的 width。有了这个 transition 属性,width 的变化将不再是瞬间完成,而是在0.5秒内平滑过渡,使用 ease 缓动函数。
JavaScript 动画逻辑
为了使进度条动起来,我们需要使用JavaScript来周期性地更新其 value 属性。这可以通过 setInterval 函数实现。
// 获取进度条元素
let progressBar = document.getElementById("prog");
// 定义每次进度增加的步长(例如,每次增加10%)
let speed = 10;
// 定义更新间隔时间(例如,每1秒更新一次)
let iteration = 1 * 1000; // 毫秒
// 使用 setInterval 周期性更新进度条
let interval = setInterval(() => {
// 增加进度条的值
progressBar.value += speed;
// 当进度达到或超过最大值时,清除定时器
if (progressBar.value >= progressBar.max) {
clearInterval(interval);
}
}, iteration);代码说明:
- document.getElementById("prog"):获取HTML中 id 为 "prog" 的进度条元素。
- speed:定义了每次更新时 value 属性增加的量。这里设置为 10,意味着每次增加10个单位。
- iteration:定义了 setInterval 回调函数执行的间隔时间,单位是毫秒。这里设置为 1 * 1000,即1秒。
- setInterval(() => { ... }, iteration):这个函数会每隔 iteration 毫秒执行一次回调函数。
- progressBar.value += speed;:在每次执行时,将进度条的当前值增加 speed。
- if (progressBar.value >= progressBar.max) clearInterval(interval);:当进度条的值达到或超过其 max 属性时,调用 clearInterval 来停止 setInterval,防止无限循环。
完整示例
将上述HTML、CSS和JavaScript代码整合,即可得到一个具有平滑动画效果的进度条。
平滑动画进度条
0%
注意事项与总结
- 浏览器兼容性:
- 动画平滑度:iteration 的值越小,JavaScript更新 value 的频率越高,动画看起来会越平滑。但过小的 iteration 值可能会增加CPU负担,需要根据实际需求进行权衡。transition 的 duration 和 timing-function 也直接影响视觉平滑度。
- 替代方案:对于需要高度定制化或更复杂动画效果的进度条,可以考虑不使用原生的











