随机色 | JavaScript获取随机颜色

简介: JavaScript 随机颜色有很多方法,在项目中使用如下方法,方法选自网络,并结合实际更改

image.png

“JavaScript 随机颜色有很多方法,在项目中使用如下方法,方法选自网络,并结合实际更改”

01

全部的随机色

"#" + Math.floor(Math.random() * 0xffffff).toString(16).padEnd(6, "0");

02

明亮色



rdmRgbColor() {
      //随机生成RGB颜色
      const arr = [];
      for (let i = 0; i < 3; i++) {
        // 暖色
        // arr.push(Math.floor(Math.random() * 128 + 64));
        // 亮色
        arr.push(Math.floor(Math.random() * 128 + 128));
      }
      const [r, g, b] = arr;
      // rgb颜色
      // var color=`rgb(${r},${g},${b})`;
      // 16进制颜色
      const color = `#${
        r.toString(16).length > 1 ? r.toString(16) : "0" + r.toString(16)
      }${g.toString(16).length > 1 ? g.toString(16) : "0" + g.toString(16)}${
        b.toString(16).length > 1 ? b.toString(16) : "0" + b.toString(16)
      }`;
      return color;
    }

03

随机亮色,且不和相邻重复的颜色

这个方法我给写成了class,项目是ts,所以也是使用了ts。通过实例化类,访问里面的访问器方法,获取随机生成的颜色

class RandomColor {
    length: number
    hslArray: number[][]
    constructor(length: number) {
        this.length = length
        this.hslArray = this.getHslArray()
    }
    // 获取随机HSL
    randomHsl(): number[] {
        const H = Math.random()
        const S = Math.random()
        const L = Math.random()
        return [H, S, L];
    }

    // 获取HSL数组
    getHslArray(): number[][] {
        let HSL: number[][] = []
        const hslLength = this.length; // 获取数量
        for (let i = 0; i < hslLength; i++) {
            let ret = this.randomHsl();

            // 颜色相邻颜色差异须大于 0.25
            if (i > 0 && Math.abs(ret[0] - HSL[i - 1][0]) < 0.25) {
                i--;
                continue; // 重新获取随机色
            }
            ret[1] = 0.7 + (ret[1] * 0.2); // [0.7 - 0.9] 排除过灰颜色
            ret[2] = 0.4 + (ret[2] * 0.4); // [0.4 - 0.8] 排除过亮过暗色

            // 数据转化到小数点后两位
            ret = ret.map((item) => {
                return parseFloat(item.toFixed(2));
            });
            console.log('ret', ret);


            HSL.push(ret);
        }
        return HSL;
    }

    /**
     * HSL颜色值转换为RGB
     * H,S,L 设定在 [0, 1] 之间
     * R,G,B 返回在 [0, 255] 之间
     * @param H 色相
     * @param S 饱和度
     * @param L 亮度
     * @returns Array RGB色值
     */
    hslToRgb(H: number, S: number, L: number): number[] {
        let R, G, B;
        if (+S === 0) {
            R = G = B = L; // 饱和度为0 为灰色
        } else {
            const hue2Rgb = (p, q, t) => {
                if (t < 0) t += 1;
                if (t > 1) t -= 1;
                if (t < 1 / 6) return p + (q - p) * 6 * t;
                if (t < 1 / 2) return q;
                if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;
                return p;
            };
            const Q = L < 0.5 ? L * (1 + S) : L + S - L * S;
            const P = 2 * L - Q;
            R = hue2Rgb(P, Q, H + 1 / 3);
            G = hue2Rgb(P, Q, H);
            B = hue2Rgb(P, Q, H - 1 / 3);
        }
        return [Math.round(R * 255), Math.round(G * 255), Math.round(B * 255)];
    }
    // 合成rgb
    get rgbArray(): {} {
        console.log('hslArray', this.hslArray);
        if (!this.hslArray.length) return []
        const rgbArray1 = this.hslArray.map(v => {
            const [H, S, L] = v
            return this.hslToRgb(H, S, L)
        })
        return rgbArray1.map(v => {
            return {
                color: `rgb(${v.toString()})`
            }
        })
    }
}

console.log('randomColor', new RandomColor(8).rgbArray);
相关文章
|
5月前
|
JavaScript
js 生成随机数(含随机颜色)
js 生成随机数(含随机颜色)
43 0
|
6月前
|
JavaScript 前端开发
JavaScript 计算颜色的相对亮度,并确定相应的文本颜色
JavaScript 计算颜色的相对亮度,并确定相应的文本颜色
69 0
|
JavaScript
jQuery jquery.color.js 背景颜色支持动画
jQuery jquery.color.js 背景颜色支持动画
108 0
|
7月前
|
前端开发
编程笔记 html5&css&js 018 HTML颜色
编程笔记 html5&css&js 018 HTML颜色
|
前端开发 JavaScript
使用 JavaScript 和 CSS 的随机颜色生成器
使用 JavaScript 和 CSS 的随机颜色生成器
146 0
|
JavaScript 小程序
小程序通过js控制页面字体颜色属性
小程序通过js控制页面字体颜色属性
94 0
|
JavaScript 前端开发
JavaScript时间戳获取及时间戳判断(同时设置不同的颜色。已开始的事件显示绿色,未开始的事件显示黑色,过去的事件显示灰色)
JavaScript时间戳获取及时间戳判断(同时设置不同的颜色。已开始的事件显示绿色,未开始的事件显示黑色,过去的事件显示灰色)
116 0
|
数据可视化 搜索推荐 JavaScript
数据可视化大屏Echarts高级开发散点图实战案例分析(地图扩展插件bmap.min.js、散点图、百度地图控件、柱图、涟漪动图、条件判断颜色)
数据可视化大屏Echarts高级开发散点图实战案例分析(地图扩展插件bmap.min.js、散点图、百度地图控件、柱图、涟漪动图、条件判断颜色)
632 0
|
JavaScript
JS数据根据键值匹配Echarts颜色的解决方案
JS数据根据键值匹配Echarts颜色的解决方案
80 0
|
JavaScript
js字符串拼接的数据三元表达式输出颜色
js字符串拼接的数据三元表达式输出颜色
59 0