Node.js 控制台进度条实现原理


1,实现在终端同一行输出不同内容

import readline form 'readline';

console.clear();
setInterval(() => { //删除光标所在行
  readline.clearLine(process.stdout, 0); //移动光标到行首
  readline.cursorTo(process.stdout, 0, 0)
  process.stdout.write(new Date().toLocaleString(), 'utf-8');
}, 1000);


2, 实现进度条

import readline form 'readline';

console.clear();

let completed = 0;
let total = 100;
let length = 25; //进度条长度

var timer = setInterval(() => {
  readline.clearLine(process.stdout, 0); //删除光标所在行
  readline.cursorTo(process.stdout, 0, 0); //移动光标到行首

  let percent = (completed / total).toFixed(4);
  var cell_num = Math.floor(percent * length); // 计算需要多少个 █ 符号来拼凑图案
  
  // 拼接黑色条
  var cell = '';
  for (var i = 0; i < cell_num; i++) {
    cell += '█';
  }
  // 拼接灰色条
  var empty = '';
  for (var i = 0; i < length - cell_num; i++) {
    empty += '░';
  }

  // 拼接最终文本
  var cmdText = '进度: ' + (100 * percent).toFixed(2) + '% ' + cell + empty + ' ' + completed + '/' + total;
  
  process.stdout.write(cmdText, 'utf-8');

  if(completed>=total){
    clearInterval(timer);
    readline.cursorTo(process.stdout, 0, 2);
    console.log("完成");
  }

  completed = completed + 2;
}, 10);


如无特殊需要,可以参考完善的 npm 包:https://www.npmjs.com/package/progress

声明:本站所有文章,如无特殊说明或,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。本站所有图片如无特殊说明均为AI生成。
真诚赞赏,手留余香
赞赏
Node.js,云服务
阿里云内容安全 API 签名机制
2023-08-04
软件技巧
视频剪辑软件 Shotcut 笔记
2023-09-06
Jone
在什么样的花园里面,挖呀挖呀挖
种什么样的种子,开什么样的花
随机推荐
MySQL 表名预处理
MySQL 数据库中货币单位如何存储
Debian11 安装笔记3:安装 MySQL 5.7
FFmpeg 修改默认音轨
CSS 滚动条样式修改
使用 svg 作为背景图片
Rollup 教程
Linux apt 命令
Nginx 的 location 设置
MySQL 字符串截取函数 SUBSTRING_INDEX

微信联系我

夜间模式切换
回到顶部