进度条progress bar

有时候项目中需要一个进度条插件,关注执行进度,心里有底。

忘了从哪里看的代码,贴出来一起学习下。

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
import { stdout } from 'single-line-log'

export default 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

// 在单行输出文本
stdout(cmdText)
}
}