Progress.js进阶实战:如何为任意页面元素独立控制进度条
【免费下载链接】progress.jsProgressJs is a JavaScript and CSS3 library which help developers to create and manage progress bar for every objects on the page.项目地址: https://gitcode.com/gh_mirrors/pr/progress.js
Progress.js 是一个轻量级的 JavaScript + CSS3 进度条库,它可以让页面上的任意元素都拥有一条独立、互不干扰的进度条。无论你是做下载列表、表单提交反馈,还是文件上传面板,都能用几行代码为每个目标元素精确控制进度条的启动、增长、主题与收尾。
🚀 快速上手:3 行代码让进度条跑起来
如果你本地还没有源码,可以先克隆仓库:
git clone https://gitcode.com/gh_mirrors/pr/progress.js接入页面只需两步:
- 引入样式与脚本:开发期使用 src/progress.js 和 src/progressjs.css;生产环境务必换成压缩版 minified/progress.min.js 和 minified/progressjs.min.css
- 在页面中执行启动代码:
// 整页进度条 progressJs().start(); // 或:只针对某个元素 progressJs("#targetElement").start();就是这么简单——进度条会出现在页面顶部,宽度随百分比平滑推进,数字还会带滚动动画。
🎯 任意页面元素独立控制:一切的秘密都在"定位"
Progress.js 最强大的地方,是它能为每个元素单独创建一条进度条,彼此完全独立。它的内部机制是:
- 每个目标元素被绑定一个唯一的
data-progressjs编号,进度条容器按编号对号入座(见 _setProgress 实现) - 目标为
body时使用fixed定位,其他元素使用absolute定位,自动算出元素的偏移与宽度(见 定位逻辑)
三种指定目标元素的方式:
| 方式 | 写法示例 | 适用场景 |
|---|---|---|
| 不传参数 | progressJs() | 整页进度(如页面加载) |
| CSS 选择器 | progressJs(".upload-item") | 批量选中同类元素(内部走querySelectorAll,匹配到几个就生成几条进度条) |
| DOM 元素对象 | progressJs(document.getElementById("box")) | 已持有元素引用时 |
典型实战——为下载列表里每一项挂上独立进度条:
var bar = progressJs(".download-item"); // 列表每一项各有一条 bar.onprogress(function (el, percent) { console.log(el, percent); // 哪个元素、多少百分比,都能区分 }); bar.start();由于选择器支持匹配多个元素,"一个操作、多元素各自独立推进"天然成立,这正是 工厂函数的目标解析逻辑 所为。
📋 常用进度条方法一览:精确掌控每一次变化
所有方法都支持链式调用(均返回this),完整定义见 原型方法区:
| 方法 | 作用 | 一句话说明 |
|---|---|---|
start() | 启动进度条 | 初始进度为 1%,平滑动画起步 |
set(30) | 直接设置百分比 | 一次跳到 30%,数字带滚动动画 |
increase(10) | 增量推进 | 在当前位置上 +10% |
autoIncrease(5, 300) | 自动递增 | 每 300ms 自动 +5%,适合耗时任务 |
end() | 优雅结束 | 先补足到 100%,再淡出移除 |
kill() | 立即移除 | 任务失败时直接干掉,不留尾巴 |
💡 实战组合拳:上传任务启动时autoIncrease,收到服务端真实进度时改用set,成功走end()、出错走kill()——四种状态全部覆盖。
⚠️ 小提醒:autoIncrease的定时器由内部统一管理,调用end()或kill()时会自动清除,不会内存泄漏。
⚙️ 进度条主题定制:6 种内置风格 + 覆盖层模式
进度条外观由theme选项控制,默认是 iOS 风格细线条的blue(见 默认配置)。主题样式文件 内置了 6 套风格:
| 主题名 | 效果 |
|---|---|
blue | 经典蓝色细线(默认) |
blueOverlay | 蓝色半透明覆盖层,遮住整个元素 |
blueOverlayRadius | 覆盖层 + 圆角 |
blueOverlayRadiusHalfOpacity | 圆角覆盖层 + 半透明遮罩 |
blueOverlayRadiusWithPercentBar | 覆盖层 + 大号百分比数字 |
blackRadiusInputs | 黑色圆角条,适合输入框类组件 |
切换主题只需在启动前配置,并可搭配overlayMode让进度条以覆盖层形式铺满目标元素:
progressJs("#uploadBox") .setOption("theme", "blueOverlayRadiusHalfOpacity") .setOption("overlayMode", true) .start();想要自己的品牌色?往样式文件里照葫芦画瓢加一段.progressjs-theme-你的主题名规则即可,无需改 JS 一行代码。
🔔 进度回调事件:用 onprogress 捕捉每一次变化
Progress.js 提供三个钩子,全部在 原型方法区 定义:
onbeforestart(回调):进度条创建前触发,适合记录"任务开始"onprogress(元素, 百分比):每次进度变化都会回调,且携带当前元素引用——多元素场景下判断"谁到 50% 了"靠它onbeforeend(回调):结束前触发。配合considerTransition选项(默认开启),它会等 CSS 过渡动画真正结束再执行回调
var bar = progressJs("#uploadBox"); bar.onprogress(function (el, percent) { if (percent >= 80) statusText.textContent = "即将完成…"; }); bar.onbeforeend(function () { statusText.textContent = "上传成功!"; }); bar.start();✅ 新手避坑清单
- 元素必须先存在:选择器匹配不到元素时会直接抛出
There is no element with given selector错误,请在元素渲染完成后再调用 - 进度有上下限:起步 1%,上限自动封顶 100%(见 溢出保护),不用手动 clamp
- 重复 start 会被忽略:元素已有
data-progressjs标记时不会重复创建进度条,天然防抖 - 生产环境用压缩版:本地开发跑完后,把引用换成
minified目录下的文件 - 修改源码后记得构建:仓库提供了 Makefile,执行
make build即可重新压缩静态资源(需先npm install)
📦 总结
Progress.js 把"给任意页面元素挂独立进度条"这件常见却琐碎的需求,压缩成了start/set/increase/autoIncrease/end/kill六个动词,再加 6 套内置主题和 3 个回调钩子。体积小、无依赖、链式 API 好记,是前端项目里控制多元素进度的一个优雅解法。完整用法参见项目说明 README.md。
【免费下载链接】progress.jsProgressJs is a JavaScript and CSS3 library which help developers to create and manage progress bar for every objects on the page.项目地址: https://gitcode.com/gh_mirrors/pr/progress.js
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考