Hola:
Hace tiempo puse un mensaje sobre fondos degradados en las FAQs javascript y me han preguntado como elegir los colores, ya que el ejemplo venía con una transición difícil de confugurar, y no sabía responder...
En otro mensaje, otro buen forero (epplestun) mostró una página donde se podían encontrar los colores intermedios de 2 dados, y basándome en esa página, preparé el siguiente script:
Código:
function decahex(n) {
return hexa.charAt(n / 16) + hexa.charAt(n % 16);
}
function colorHexa(c) {
return "#" + decahex(c[0]) + decahex(c[1]) + decahex(c[2]);
}
function transitar(ini, fin, pasos) {
var dato = desglose(ini);
var rIni = dato[0];
var gIni = dato[1];
var bIni = dato[2];
var intermedios = new Array(pasos);
intermedios[0] = dato;
var dato = desglose(fin);
intermedios[pasos - 1] = dato;
var rFin = dato[0];
var gFin = dato[1];
var bFin = dato[2];
var rMed = (rFin - rIni) / (pasos - 1);
var gMed = (gFin - gIni) / (pasos - 1);
var bMed = (bFin - bIni) / (pasos - 1);
for (var i = 1; i < pasos - 1; i ++) {
var rgb = new Array(3);
rgb[0] = parseInt(rIni + (rMed * i));
rgb[1] = parseInt(gIni + (gMed * i));
rgb[2] = parseInt(bIni + (bMed * i));
intermedios[i] = rgb;
}
for (i = 0; i < intermedios.length; i ++)
intermedios[i] = colorHexa(intermedios[i]);
return intermedios;
}
function desglose(color) {
if (color.length != 6)
return "poblema";
else {
devolver = new Array(3);
devolver[0] = hexadec(color.substr(0, 2));
devolver[1] = hexadec(color.substr(2, 2));
devolver[2] = hexadec(color.substr(4, 2));
}
return devolver;
}
var hexa = "0123456789abcdef";
function hexadec(x) {
x = x.toLowerCase();
return parseInt(hexa.indexOf(x.charAt(0))) * 16 + parseInt(hexa.indexOf(x.charAt(1)))
}
Usando: var colores = transitar(color1, color2, longitud);
Se obtiene en la variable colores, un array con todos los colores intermedios entre color1 y color2 (creo que no es necesario explicar el significado de longitud)
Se puede ver un ejemplo en este enlace:
http://www.pepemolina.com/mapas/difuminado.html
Saludos