我希望能够调用一个采用基色的函数,并返回一个对应于相同颜色的不同色调的值数组。该数组可以包含十六进制值或rgba()值。我希望能够输入所需的阴影量。然后,阴影量也可以用作增加阴影的度量。例如,如果我想要输出有3种不同的阴影,第一个阴影将是基数的1/3 ..但是数学可以工作...另外,在某些情况下,第一个阴影可能需要100%透明所以我我想接受初始alpha的争论。我已经组织了我认为函数的基本逻辑,但数学对我来说不清楚。
var buildColorStops = function (baseColor,numberOfValues,initialAlpha) {
var b = baseColor;
var n = numberOfValues //expected number of colors in the output. If n was 3 results would be [light blue, blue(base), dark blue] (# or rgba will work)
var d = 1 / n; // if number of values was 5 d would represent 1/5 of the base.
var ia = initialAlpha; // some situations may require the first color to be 100% transparent
var outputArray = [];
var i = 0;
while (i < n) {
if (i == 0) {
//...math on base color & incorporate initial alpha
outputArray.push("result of math on base")
}
else {
//...math on base color by incrementing d or 1/n
outputArray.push("result of math on base")
}
}
return outputArray;
}// end of buildColorStops
答案 0 :(得分:7)
可以通过保持颜色比例相同来生成阴影。假设您的基色具有(r,g,b)
红色,绿色,蓝色值。
因此组件之间的比率为r:g:b
。如果你想生成10个阴影,那么你的阴影就是。
(r/10, g/10, b/10)
(2*r/10, 2*g/10, 2*b/10)
(3*r/10, 3*g/10, 3*b/10)
(4*r/10, 4*g/10, 4*b/10) and so on
那是暗色调。
浅色调
(11*r/10, 11*g/10, 11*b/10)
(12*r/10, 12*g/10, 12*b/10)
(13*r/10, 13*g/10, 13*b/10) and so on
检查r,g,b的结果值是否不超过255,因为它们会增加它们的值。
实际上为了避免超过255,你可以检查r,g,b中的最大值,并使用该值来生成阴影。
var max = Math.max(r,Math.max(g,b));
var step = 255 / (max * 10)
(r * step, g * step, b * step)
(r * step * 2, g * step * 2, b * step * 2)
(r * step * 3, g * step * 3, b * step * 3)