Javascript 如果还有其他的话,那就更好了

Javascript 如果还有其他的话,那就更好了,javascript,if-statement,Javascript,If Statement,我有一个功能,可以根据滑块的值更改背景颜色 有35种不同的颜色,我现在使用这个代码,当然它更长 if (value < 25) { color = '#FFFFFF'; } else if (value > 25 && value < 50) { color = '#F8F8F8'; } else if (value > 50 && value < 75) { color = '#F0F0F0 '; } 有没

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

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

if (value < 25) {
    color = '#FFFFFF';
} else if (value > 25 && value < 50) {
    color = '#F8F8F8';
} else if (value > 50 && value < 75) {
    color = '#F0F0F0 ';
}
有没有办法缩短这个时间

colors = {'#FFFFFF','#F8F8F8','#F0F0F0 '}
color=colors[(int)value/25];
您可能需要根据值的范围对此进行调整

您可能需要根据值的范围对此进行调整。

请改用&和级联

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
}
放弃&&而改为级联

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
}

如果递增25,则创建一个颜色数组:

var colors = ['#FFFFFF', '#F8F8F8', '#F0F0F0 ', ... ]
然后做一点数学,看看该使用哪个索引

color = colors[(value - (value % 25)) / 25];
或者,如果您愿意:

color = colors[Math.floor(value / 25)];

如果递增25,则创建一个颜色数组:

var colors = ['#FFFFFF', '#F8F8F8', '#F0F0F0 ', ... ]
然后做一点数学,看看该使用哪个索引

color = colors[(value - (value % 25)) / 25];
或者,如果您愿意:

color = colors[Math.floor(value / 25)];

您可以使用一个对象数组来描述颜色以及范围的最小值和最大值,然后使用函数在数组中迭代以查找范围之间的颜色

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;
}

只需稍加努力,您就可以公开一种添加新颜色和范围的方法,以及范围间隔的默认值等。但是,如果您的颜色和范围间隔是固定的,这可能有点过头了。

您可以使用一个对象数组来描述颜色以及范围的最小值和最大值,然后使用函数在数组中迭代,以找到范围之间的颜色

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;
}

只需稍加努力,您就可以公开一种添加新颜色和范围的方法,以及范围间隔的默认值等。但是,如果您的颜色和范围间隔是固定的,那么这可能是过分的。

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

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);

你有一个优点,那就是你不必写一个巨大的灰色阴影数组。

你可以做一些类似的事情,使它成为一个没有数组的两行语句:

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);

你有一个优点,那就是你不必写大量的灰色阴影。

更多的防弹版本不是完全防弹的

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

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

var color = colors[ Math.floor(value/25) ];

更多的防弹版本不是完全防弹的

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

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

var color = colors[ Math.floor(value/25) ];


你真的不必在else语句中重新测试负数…如果value==25会发生什么?value从来都不是25,它以25为单位,从5开始,但我不应该重新测试负数,这使得它更容易你不需要在else语句中重新测试负数…如果value==25会发生什么?value永远不是25,它以25的步长开始,以5开始,但我不应该重新测试负数,这使它更容易抱歉。。。虽然这是java,但同样的概念也适用,虽然我喜欢这个想法,但我尝试创建一个arraysorry。。。虽然这是java,但同样的概念也适用,虽然我喜欢这个想法,但我尝试创建一个数组。使用颜色[value/25 | 0]之类的东西进行整数除法在计算上会更便宜,而不是使用mod运算符,甚至不调用Math.floor。@TedHopp:任何性能增益乘以此代码将运行的总次数都可能比您键入该注释所花费的时间要少-第一种方法很糟糕,你使用两个除法和减法只是为了得到一个索引-@埃尔姆斯:你正在使用一个函数。。。只是为了得到一个索引。说它糟糕是胡说八道。可以说第二种解决方案更干净,或者至少更直观。使用颜色[value/25 | 0]之类的东西进行整数除法在计算上更便宜,而不是使用mod运算符,甚至不调用Math.floor。@TedHopp:任何性能增益乘以此代码将运行的总次数都可能比您键入该注释所花费的时间要少-第一种方法很糟糕,你使用两个除法和减法只是为了得到一个索引-@埃尔姆斯:你正在使用一个函数。。。只是为了得到一个索引。可以说,第二种解决方案更干净,或者至少更直观,而不是使用默认输入值和默认索引,为什么不简化并使用默认颜色呢?var color=colors[Math.floorvalue/25]| |默认|u颜色;与其使用默认输入值和默认索引,为什么不简化并使用默认颜色呢?var color=colors[Math.floorvalue/25]| |默认|u颜色;