在做颜色选择时,为了能够直观的预览出颜色,我们如果一直用一个背景色会出现撞色,使预览不那么直观,这里我们就需要通过调整他的背景色来做个对比,这里介绍一种通过对比度的算法来计算背景色的方案
我们通过计算对比度,给出适合的黑白背景色,代码如下:
function calcBackgroundColor(hex) {
// 将十六进制颜色转换为RGB数组
if(hex.indexOf('#') === -1) {
//rbg(1,1,1)
hex = hex.replace(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/, function(match, r, g, b) {
return'#' + ('0' + parseInt(r).toString(16)).slice(-2) +
('0' + parseInt(g).toString(16)).slice(-2) +
('0' + parseInt(b).toString(16)).slice(-2)
})
}
// 移除十六进制字符串中的 '#' 字符
hex = hex.replace('#', '')
// 将颜色值转换为两个数字的字符串,然后解析为整数
const r = parseInt(hex.substring(0, 2), 16)
const g = parseInt(hex.substring(2, 4), 16)
const b = parseInt(hex.substring(4, 6), 16)
// 计算亮度
const brightness = 0.299 * r + 0.587 * g + 0.114 * b
// 如果亮度大于128,认为背景色较亮,返回黑色
// 否则返回白色
return brightness > 128 ? '#000000' : '#FFFFFF'
}