颜色随机,去掉灰色,太亮,太暗的颜色,使用hls 写法基于vue

第一步: 获取随机的 hls

data(){
	return{
		hslArray: [],
	}
}

 // 获取HSL数组
    getHslArray() {
      var HSL = [];
      var hslLength = 34; // 获取数量
      for (var i = 0; i < hslLength; i++) {
        // 获取随机HSL
        var H = Math.random();
        var S = Math.random();
        var L = Math.random();
        var ret = [H, S, L];
        // 颜色相邻颜色差异须大于 0.5
        if (i > 0 && Math.abs(ret[0] - HSL[i - 1][0]) < 0.28) {
          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(function(item) {
          return parseFloat(item.toFixed(2));
        });
        HSL.push(ret);
      }
      this.hslArray = HSL;
    },

第二步:转为 RGB

/**
     * HSL颜色值转换为RGB
     * H,S,L 设定在 [0, 1] 之间
     * R,G,B 返回在 [0, 255] 之间
     * H 色相, S 饱和度, L 亮度
     * 返回RGB色值
     */
    hslToRgb(H, S, L) {
      var R, G, B;
      if (+S === 0) {
        R = G = B = L; // 饱和度为0 为灰色
      } else {
        var hue2Rgb = function(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;
        };
        var Q = L < 0.5 ? L * (1 + S) : L + S - L * S;
        var P = 2 * L - Q;
        // H = H/360;
        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色值拼成数组
    getRgbArray() {
      var self = this;
      if (!self.hslArray.length) return [];
      	self.rgbArray = self.hslArray.map(function(item) {
        let hslItem = self.hslToRgb.apply(this, item);
        return "rgb(" + hslItem.toString() + ")";
      });
    },

第四步:调用

mounted(){
	 this.getHslArray();
    	this.getRgbArray();
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值