-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprogress.js
36 lines (30 loc) · 1.24 KB
/
progress.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// 这里用到一个很实用的 npm 模块,用以在同一行打印文本
var slog = require('single-line-log').stdout;
// 封装的 ProgressBar 工具
function ProgressBar (description, bar_length) {
// 两个基本参数(属性)
this.description = description || 'Progress'; // 命令行开头的文字信息
this.length = bar_length || 15; // 进度条的长度(单位:字符),默认设为 25
// 刷新进度条图案、文字的方法
this.render = function (opts) {
var percent = (opts.completed / opts.total).toFixed(4); // 计算进度(子任务的 完成数 除以 总数)
var cell_num = Math.floor(percent * this.length); // 计算需要多少个 █ 符号来拼凑图案
// 拼接黑色条
var cell = '';
for (var i = 0; i < cell_num; i++) {
cell += '█';
}
// 拼接灰色条
var empty = '';
for (var i = 0; i < this.length - cell_num; i++) {
empty += '░';
}
var progress = (100 * percent).toFixed(2);
// 拼接最终文本
var cmdText = progress === '100.00' ? '' : this.description + ': ' + progress + '% ' + cell + empty + ' ' + opts.completed + '/' + opts.total;
// 在单行输出文本
slog(cmdText);
};
}
// 模块导出
module.exports = ProgressBar;