-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathprogress-bar.js
46 lines (39 loc) · 1.23 KB
/
progress-bar.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
37
38
39
40
41
42
43
44
45
46
// 这里用到一个很实用的 npm 模块,用以在同一行打印文本
let slog = require('single-line-log').stdout
// 封装的 ProgressBar 工具
function ProgressBar(description, bar_length) {
// 两个基本参数(属性)
this.description = description || 'Progress' // 命令行开头的文字信息
this.length = bar_length || 25 // 进度条的长度(单位:字符),默认设为 25
// 刷新进度条图案、文字的方法
this.render = function (opts) {
let percent = (opts.completed / opts.total).toFixed(4) // 计算进度(子任务的 完成数 除以 总数)
let cell_num = Math.floor(percent * this.length) // 计算需要多少个 █ 符号来拼凑图案
// 拼接黑色条
let cell = ''
for (let i = 0; i < cell_num; i++) {
cell += '█'
}
// 拼接灰色条
let empty = ''
for (let i = 0; i < this.length - cell_num; i++) {
empty += '░'
}
// 拼接最终文本
let cmdText =
this.description +
': ' +
(100 * percent).toFixed(2) +
'% ' +
cell +
empty +
' ' +
opts.completed +
'/' +
opts.total
// 在单行输出文本
slog(cmdText)
}
}
// 模块导出
module.exports = ProgressBar