Para trabajar con color en los elementos canvas tenemos varias posibilidades, pero de momento vamos a aprender a modificar el color con el que se rellena o se dibuja trazados. Como vimos anteriormente, al dibujar rectángulos, podemos elegir entre dibujar sólo su contorno o dibujarlos rellenos de color (y luego veremos que esto es así con otros tipos de caminos). Ahora veremos que existen dos atributos del contexto del canvas que sirven para definir el color de relleno y el color de trazado a la hora de dibujar rectángulos u otros caminos.
ctx.fillStyle = '#990000';
Suponiendo que tenemos el objeto contexto de un canvas en la variable ctx, con la anterior línea estamos solicitando al elemento canvas que la próxima vez que se rellene el color se haga en rojo oscuro.
ctx.strokeStyle = '#000099';
Con esa línea estamos marcando que el color de trazado sea azul oscuro. Por lo cual, la próxima vez que se haga un trazado la línea será de ese color.
Nosotros podremos elegir la que más nos convenga según nuestro caso.
Si lo deseas, antes de continuar la lectura, puede ser interesante ver el ejemplo en marcha.
Veamos antes que nada un par de funciones para conseguir un color aleatorio en Javascript. La primera nos ofrece un número aleatorio y la segunda, que se apoya en la primera, nos sirve para generar una cadena que especifica un color.
function aleatorio(inferior,superior){
numPosibilidades = superior - inferior
aleat = Math.random() * numPosibilidades
aleat = Math.floor(aleat)
return parseInt(inferior) + aleat
}
function colorAleatorio(){
return "rgb(" + aleatorio(0,255) + "," + aleatorio(0,255) + "," + aleatorio(0,255) + ")";
}
Ahora vamos a mostrar otra función para dibujar el lienzo de un canvas, rellenando de cuadraditos con colores aleatorios:
function cuadradosAleatorios(){
for(i=0; i<300; i+=10){
for(j=0; j<250; j+=10){
contexto.fillStyle = colorAleatorio();
contexto.fillRect(i,j,10,10)
}
}
}
Como se puede ver, tenemos un bucle anidado, que realiza la tarea. En cada iteración se obtiene un color aleatorio y luego se pinta un rectángulo con ese color. La función utiliza una variable global llamada "contexto", que es el contexto del canvas sobre el que estamos dibujando.
Ahora para acabar vamos a ver la función que se encargará de inicializar el contexto del canvas y definir la ejecución periódica de la función cuadradosAleatorios() para generar la animación.
//variable global contexto sin inicializar
var contexto;
window.onload = function(){
//Recibimos el elemento canvas
contexto = cargaContextoCanvas('micanvas');
if(contexto){
//Si tengo el contexto, defino la función periódica
setInterval("cuadradosAleatorios(contexto)", 200);
}
}
Todo esto junto hace que consigamos una animación en el canvas, pues se invoca a la función cuadradosAleatorios() cada 200 milisegundos, lo que genera dibujos aleatorios distintos cada poco tiempo.
Ahora podemos ver el ejemplo en marcha en una página aparte.
La única función que tiene cambios con respecto al ejemplo anterior es cuadradosAleatorios():
function cuadradosAleatorios(){
for(i=0; i<300; i+=10){
for(j=0; j<250; j+=10){
contexto.strokeStyle = colorAleatorio();
contexto.strokeRect(i,j,5,5)
}
}
}
El ejemplo cambiando esta función se puede ver en una página aparte.