随机生成 HEX 十六进制颜色,以及控制台打印彩色文字和样式效果
随机生成 HEX 十六进制颜色
// RGB 转 HEX
function rgb2hex(r, g, b) {
return `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)}`;
}
// 生成 n 个 最大值不超过 max 的整数
function randomInt(max = 256, n = 3) {
return Array(n).fill().map(() => Math.floor(Math.random() * max));
}
// 生成 HEX 格式的随机色
function randomHexColor() {
return rgb2hex(...randomInt());
}
扩展 String 原型对象上的方法,实现控制台打印带样式的文字
// 颜色字典
const colors = {
black: 0,
red: 1,
green: 2,
yellow: 3,
blue: 4,
purple: 5,
deepGreen: 6,
white: 7
};
// 样式字典
const styles = {
bolder: 1, // 加粗
italic: 3, // 斜体
baseline: 4, // 下划线
flash: 5, // 闪烁
reverse: 7, // 反色
hidden: 8 // 隐藏
};
// 颜色工厂函数
function colorFactory(colorId = 7) {
const modeMap = {
fr: 3, // 前景模式
bg: 4 // 背景模式
};
return function(mode = 'fr') {
return `\x1b[${modeMap[mode]}${colorId}m` + this + '\x1b[0m';
};
}
// 样式工厂函数
function styleFactory(styleId) {
return function() {
return `\x1b[${styleId}m` + this + '\x1b[0m';
};
}
// String 原型对象上添加颜色函数
Object.assign(String.prototype, Object.entries(colors).reduce((obj, [color, id]) => {
obj[color] = colorFactory(id);
return obj;
}, {}));
// String 原型对象上添加样式函数
Object.assign(String.prototype, Object.entries(styles).reduce((obj, [style, id]) => {
obj[style] = styleFactory(id);
return obj;
}, {}));
测试效果
for (let i = 0; i < 5; ++i) {
console.log(`随机颜色${i + 1}:`.yellow('bg').black(), randomHexColor().bolder().italic().baseline().blue());
}