1

我有一个功能可以根据滑块的值更改背景颜色

有 35 种不同的颜色,我现在使用这个代码(当然它更长)

if (value < 25) {
    color = '#FFFFFF';
} else if (value > 25 && value < 50) {
    color = '#F8F8F8';
} else if (value > 50 && value < 75) {
    color = '#F0F0F0 ';
}

有没有办法缩短这个?

4

6 回答 6

3

如果要增加 25,则制作一个颜色数组:

var colors = ['#FFFFFF', '#F8F8F8', '#F0F0F0 ', ... ]

然后做一些数学运算,看看要使用哪个索引。

color = colors[(value - (value % 25)) / 25];

或者,如果您愿意:

color = colors[Math.floor(value / 25)];
于 2013-02-24T18:48:20.493 回答
1

您可以通过执行类似于此的操作使其成为一个没有数组的两行语句:

var rgbvalue = 255-Math.floor(value/25);
var color = 'rgb('+rgbvalue+','+rgbvalue+','+rgbvalue+');';

当然,您必须限制该值,以使 rgbvalue 不会小于 0,但我想如果您知道可能的值,您可以轻松做到这一点。如果你想让它变黑得更快,你可以乘以 Math.floor 操作的结果,如下所示:

var rgbvalue = 255-(Math.floor(value/25)*5);

而且您的优势在于您不必编写大量的灰色阴影。

于 2013-02-24T18:54:26.373 回答
1

更多防弹版本(虽然不是完全防弹)

var colors = ['#FFFFFF','#F8F8F8','#F0F0F0'];

/* this is not that necessary */
var value = input_value || default_input_value;

var color = colors[ Math.floor(value/25) ];
于 2013-02-24T18:55:44.030 回答
0
colors = {'#FFFFFF','#F8F8F8','#F0F0F0 '}
color=colors[(int)value/25];

您可能需要根据value.

于 2013-02-24T18:46:11.010 回答
0

抛弃&&and 级联

if(values > 75){
  //anything above 75 falls here
} 
else if(value > 50){
  //anything <= 75 but > 50 falls here
} 
else if(values > 25){
  //anything <= 50 but > 25 falls here
} 
else {
  //anything <= 25 falls here
}
于 2013-02-24T18:46:25.813 回答
0

您可以使用描述颜色以及范围的最小值和最大值的对象数组,然后使用函数遍历数组以查找范围之间的颜色。

function getColor(value) {

    var colorRanges = [
        { color : '#FFFFFF', min : 0, max : 25 },
        { color : '#F8F8F8', min : 25, max : 50 },
        { color : '#F0F0F0', min : 50, max : 75 }
    ],
    length = colorRanges.length;

    while(length--) {
        var colorRange = colorRanges[length];
        if (value >= colorRange.min && value < colorRange.max) {
            return colorRange.color;
        }
    }

    // default color
    return colorRanges[0].color;
}

通过一些额外的努力,您可以公开一种添加新颜色和范围的方法,为范围间隔设置默认值等。但是,如果您的颜色和范围间隔是固定的,那么这可能是矫枉过正。

于 2013-02-24T18:54:19.230 回答