js给定一个颜色,生成多个变淡或变深的颜色

js给定一个颜色,生成多个变淡或变深的颜色

elementUI修改主题颜色时可以用到

生成变淡颜色
/**
  * 颜色减淡
  * @param {string} color  色值,如:##409EFF
  * @param {number} level 调整幅度,0~1之间
  * @returns {array} 最终颜色减淡的rgb数组
  */
const getLightColor = (color, level) => {
    let reg = /^\#?[0-9A-Fa-f]{6}$/;
    if (!reg.test(color)) return alert('色值不正确')
    let rgb = hexToRgb(color);
    // 循环对色值进行调整
    for(let i = 0 ; i < 3 ; i++){
        rgb[i] = Math.floor((255 - rgb[i]) * level + rgb[i]) // 始终保持在0-255之间
    }
    return rgb  // [159, 206, 255]
}

 for (let i = 1; i <= 9; i++) {
    let light = getLightColor('#409EFF', i / 10)
	console.log(light)
  }
生成变深颜色
/**
  * 颜色加深
  * @param {string} color  色值,如:##409EFF
  * @param {number} level 调整幅度,0~1之间
  * @returns 最终颜色加深的rgb数组
  */
const getDarkColor = (color, level) => {
    let reg = /^\#?[0-9A-Fa-f]{6}$/;
    if (!reg.test(color)) return alert('色值不正确')
    let rgb = hexToRgb(color);
    for(let i = 0 ; i < 3 ; i++){
        rgb[i] = Math.floor(rgb[i] - (rgb[i] * level)) // 始终保持在0-255之间
    }
    return rgb  // [32, 79, 127]
}

 for (let i = 1; i <= 9; i++) {
    let dark = getDarkColor('#409EFF', i / 10)
	console.log(dark)
  }
工具方法
/**
  * hex转rgb
  * @param {string} str  色值,如:#409EFF
  * @returns rgb数组[64, 158, 255]
  */
const hexToRgb = (str) => {
    let hexs = null;
    let reg = /^\#?[0-9A-Fa-f]{6}$/;
    if (!reg.test(str))  return alert('色值不正确')
    str = str.replace('#', '') // 去掉#
    hexs = str.match(/../g) // 切割成数组 409EFF => ['40','9E','FF']
    // 将切割的色值转换为16进制
    for (let i = 0; i < hexs.length; i++) hexs[i] = parseInt(hexs[i], 16)
    return hexs  // 返回rgb色值[64, 158, 255]
}

/**
  * rgb转hex
  * @param {number} r 红色色值,如:64
  * @param {number} g 绿色色值,如:158
  * @param {number} b 蓝色色值,如:255
  * @returns 最终rgb转hex的值,如:64,158,255 -> #409EFF
  */
const rgbToHex = (r,g,b) => {
  let reg = /^\d{1,3}$/;  // 限定1-3位 -> 0~255
  if(!reg.test(r) || !reg.test(g) || !reg.test(b)) return alert('色值不正确')
  let hex =[r.toString(16), g.toString(16), b.toString(16)]
  // 转换的值如果只有一位则补0
  for(let i = 0 ; i < 3 ; i++){
      if(hex[i].length === 1) hex[i] = `0${hex[i]}`
  }
  return `#${hex.join('')}` // #409eff
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码工人笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值