[thelist] Javascript (Math Skills Needed)

Phil Turmel pturmel-webdev at turmel.org
Wed Aug 8 13:20:44 CDT 2007


Jon Hughes wrote:
 > I got this snippet from Jeremy Keith's book, and modified it 
slightly:
 >
 > function fader(element,red,green,blue) {
 >   if (element.fade) {
 >    clearTimeout(element.fade);
 >   }
 >   element.style.backgroundColor = 
"rgb("+red+","+green+","+blue+")";
 >   if (red == 255 && green == 255 && blue == 255) {
 >    return;
 >   }
 >   var newred = red + Math.ceil((255 - red)/10);
 >   var newgreen = green + Math.ceil((255 - green)/10);
 >   var newblue = blue + Math.ceil((255 - blue)/10);
 >   var repeat = function() {
 >    fader(element,newred,newgreen,newblue)
 >   };
 >   element.fade = setTimeout(repeat,100);
 >  }
 >
 > Basically, this will fade the element from your rgb value to 
white...
 > but I don't want it to fade to white, I want it to fade to:
 > R: 243, G: 244, B: 255 --- #F3F4FF
 >
 > I tried replacing values, but I honestly have no idea what the 
math is
 > doing, so it makes it extremely difficult for me to edit.
 >
 > Does anyone know a way to fade any color to the color I want?
 >
 > Thanks,
 >
 >  - Jon
Jon,

With a few substitutions (untested), should converge from
original (red,green,blue) to target (red2,green2,blue2):

function digitalfilter(a,b,denominator) {
   var c = a + (b - a)/denominator;
   if (c < b)
     c = Math.ceil(c);
   else
     c = Math.floor(c);
   return c;
}

function fader(element,red,green,blue,red2,green2,blue2) {
   if (element.fade) {
     clearTimeout(element.fade);
   }
   element.style.backgroundColor = rgb("+red+","+green+","+blue+")";
   if (red == red2 && green == green2 && blue == blue2) {
     return;
   }
   var newred = digitalfilter(red,red2,10);
   var newgreen = digitalfilter(green,green2,10);
   var newblue = digitalfilter(blue,blue2,10);
   var repeat = function() {
     fader(element,newred,newgreen,newblue,red2,green2,blue2)
   };
   element.fade = setTimeout(repeat,100);
}



Let us know how it turns out...

Phil



More information about the thelist mailing list