Use process.stdout to "rewrite" stdout and simulate a loader.
- Dots - basic ... loader
- Stars - animate an 8 frame circle loader
- Progress Bar - simulate % completion
const main = async () => { | |
cf = 0; | |
setInterval(() => { | |
let loader = (num) => { | |
arr = []; | |
for (let i = 0; i < num; i++) { | |
arr.push("."); | |
} | |
return arr.join(""); | |
}; | |
process.stdout.cursorTo(0); | |
process.stdout.clearScreenDown(); | |
process.stdout.write(loader(cf)); | |
if (cf >= 3) { | |
cf = 0; | |
} else { | |
cf += 1; | |
} | |
}, 250); | |
}; | |
main(); |
const main = async () => { | |
total = 30 | |
cf = 0; | |
setInterval(() => { | |
let loader = (num) => { | |
arr = [,">"]; | |
for (let i = 0; i < num; i++) { | |
arr.unshift("="); | |
} | |
let prog = (num/total).toFixed(2).replace(/^0\.+/, '') | |
if ((num/total) < 1) { | |
arr.unshift(`[${prog}%]`); | |
} else { | |
arr.unshift(`[100%]`); | |
} | |
return arr.join(""); | |
}; | |
process.stdout.cursorTo(0); | |
process.stdout.clearScreenDown(); | |
process.stdout.write(loader(cf)); | |
if (cf >= total) { | |
cf = 0; | |
} else { | |
cf += 1; | |
} | |
}, 250); | |
}; | |
main(); |
const frames = [ | |
` | |
*** | |
* | |
`, | |
` | |
*** | |
* | |
`, | |
` | |
** | |
* | |
* | |
`, | |
` | |
* | |
*** | |
`, | |
` | |
* | |
*** | |
`, | |
` | |
* | |
* | |
** | |
`, | |
` | |
** | |
* | |
* | |
`, | |
]; | |
const main = async () => { | |
cf = 0; | |
setInterval(() => { | |
process.stdout.moveCursor(0, -4) | |
process.stdout.cursorTo(0) | |
process.stdout.clearScreenDown() | |
process.stdout.write(`${frames[cf]}\r`) | |
if (cf >= frames.length - 1) { | |
cf = 0; | |
} else { | |
cf += 1; | |
} | |
}, 100); | |
}; | |
main(); |