生成随机色以及控制台彩色

随机生成 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());
}
插图

版权

本作品采用 CC BY-NC-ND 4.0 授权。