☰
Progress.js进阶实战:如何为任意页面元素独立控制进度条
2026/10/4 11:10:08 网站建设 项目流程

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

接入页面只需两步:

  1. 引入样式与脚本:开发期使用 src/progress.js 和 src/progressjs.css;生产环境务必换成压缩版 minified/progress.min.js 和 minified/progressjs.min.css
  2. 在页面中执行启动代码:
// 整页进度条 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();

✅ 新手避坑清单

  1. 元素必须先存在:选择器匹配不到元素时会直接抛出There is no element with given selector错误,请在元素渲染完成后再调用
  2. 进度有上下限:起步 1%,上限自动封顶 100%(见 溢出保护),不用手动 clamp
  3. 重复 start 会被忽略:元素已有data-progressjs标记时不会重复创建进度条,天然防抖
  4. 生产环境用压缩版:本地开发跑完后,把引用换成minified目录下的文件
  5. 修改源码后记得构建:仓库提供了 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询