Bootstrap进度条动态更新后样式不变化怎么办?
用Bootstrap的进度条做文件上传进度显示,用JS修改了value属性和aria-valuenow后,数值虽然变了但颜色和样式完全没反应,搞不懂为啥样式没变…
代码是这样写的:
<div class="progress">
<div class="progress-bar" role="progressbar" style="width:0%" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div>
</div>
用JS这样更新:
document.querySelector('.progress-bar').style.width = '50%';
document.querySelector('.progress-bar').setAttribute('aria-valuenow', 50);
控制台没报错但进度条就是不变成蓝色(我设置的success状态),是不是少了什么关键步骤啊?
你现在的代码只改了宽度,但没更新样式类,所以颜色不会变。想让进度条变成蓝色,得加上bg-success这个类。不过要注意,加新样式之前最好先把旧的样式清掉,不然会样式冲突。
给你个完整的更新方法:
我习惯把移除旧样式和添加新样式写在一起,这样更保险。另外建议你封装成一个函数,传入百分比和状态参数,这样用起来更方便。比如updateProgress(75, 'success')这样的形式。
对了,记得判断下传入的状态值,防止传错导致样式不对。我就遇到过传了个error结果进度条变灰了,找了半天才发现是拼写错了。
你现在的代码只改了宽度,视觉上应该只有宽度变,但如果你之前没加颜色类,它默认就是蓝色(可能你以为是样式没变,其实是压根没设)。
重点是:动态更新时不仅要改 width,还得确保对应的 class 也在。比如你要显示成功状态:
如果你用的是 Bootstrap 5,颜色类是 bg-*,比如 bg-primary、bg-success;如果是 Bootstrap 4,是 progress-bar progress-bar-success 这种。
还有个常见坑:有时候你更新得太快,DOM 没来得及重绘,可以强制浏览器重排一下,比如加个小小的 offset 读取:
不过一般不用这步也能行。先加上颜色 class 看看有没有变化,大概率是你忘了动态更新 class 导致的。