tags:

views:

40

answers:

2

I'm creating a "characters remaining" type counter for a site of mine, and am trying to get smooth color transitions.

How would I go about creating a function to obtain the hex value for a color if I pass the maximum number (in this case 300) and the current char count assuming the pattern is green, yellow, orange, red?

This is in Javascript. Here is what I have so far:

function commentcounter(val) {
max = 300;
if(val >= max){
    color = '#FF0000';
}else if(val > (max / 2)){
    color = '#FF9900';
}else{
    color = '#00FF00';
}
display = '<span style="color:' + color + '">' + val + '/' + max + '</span>';
document.getElementById('counter').innerHTML = display;
}

As you can see, this doesn't really interpolate, just goes from green to orange to red.

+5  A: 

You need to interpolate each color component individually from 0 to 255 (or vice-versa).
This will be much easier if you use color: rgb(0, 255, 0).

SLaks
Okay, does that work cross-browser?
Cyclone
It is unless you are still using IE4. [check here](https://developer.mozilla.org/en/CSS/color_value#Browser_compatibility)
MooGoo
And split up into 3 sections instead of 2: interpolate between green
David Gelhar
+1  A: 

"rgb("+Math.round(Math.min((((chars+(max/2))*2/max)-1)255,255))+","+Math.round(Math.min(((chars-2/max)+2)*255,255))+",0)";

Jcubed
That looks crazy, but somehow it works.
Cyclone