背景
簡化了下背景,給定一個指標X,比較小的時候是正常的,比較大的時候比較危險。為了更直觀地地顯示,前端顯示的時候希望使用顏色來高亮這個值——比較小的時候顏色是綠色,較大的時候顯示紅色,並且用一些黃色進行過渡。
使用google搜了搜,沒有找到合適的代碼。於是乎,露珠自己打算搞個~貽笑大方了···
分析
顏色在HTML中可以用RGB值來表示——綠色是rgb(0,255,0), 紅色是rgb(255,0,0),黃色是rgb(255,255,0). 為了達到漸變效果,需要設計一個函數F:
F(0) = rgb(0,255,0); F(比較大的值) = rgb(255,0,0); F(中間的值) = rgb(255,255,0);
結果
函數貌似很復雜,但是調了一會就出來了,效果來不錯。
曬曬代碼:
/**
* 生成漸變色,從綠色到紅色的漸變
* @param int $x 指標值
* @param int $threshold 漸變閾值,$x等於這個值的時候剛好是黃色
* @param float $brightness 亮度,從0到1
* @return string RGB格式的顏色值
*/
function generateGradientColor($x, $threshold, $brightness = 1){
return sprintf('rgb(%d, %d, 0)',
intval(min(255, ($x * 1.0 / $threshold * 255)) * $brightness),
intval(max(0, min(255, (2 - $x * 1.0 / $threshold) * 255)) * $brightness));
}
效果
生成的漸變色的效果如下(threshold = 25):

附生成上述效果的PHP代碼:
<style>
div{
display: block;
font-size: 10px;
height: 1em;
}
</style>
<?php
for ($i = 1; $i < 50; $i++){
echo strtr("<div style='width: {width}em; $i</div>", array(
'{width}' => $i,
'{color}' => generateGradientColor($i, 25)
));
}
?>

