Javascript - 生成相同颜色的不同阴影

时间:2016-11-15 20:51:59

标签: javascript colors

我希望能够调用一个采用基色的函数,并返回一个对应于相同颜色的不同色调的值数组。该数组可以包含十六进制值或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

1 个答案:

答案 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)