Generar un color aleatorio con Javascript

  • Por
Ejemplo de función para generar un color aleatoriamente en formato hexadecimal.
Este ejercicio es muy sencillo, pero puede resultar útil para algunas personas. Se trata de una pequeña función que sirve para generar un color aleatorio, en formato hexadecimal, que es el utilizado en la creación de webs.

Lo hemos extraído de otro ejemplo realizado en Javascript, en el que necesitábamos generar un color de manera aleatoria. Creemos que puede ser interesante para comentarlo en un artículo aparte, por si alguien en sus páginas necesita crear un color totalmente aleatorio.

Para crear un color aleatorio necesitamos simplemente 6 números en hexadecimal (números del 0 a la F). Si obtenemos aleatoriamente estos 6 números hexadecimales, habremos creado el código de un color aleatorio.

Función para generar aleatorios

Por tanto, para generar un número aleatorio, vamos a apoyarnos en una función relatada en otro artículo de DesarrolloWeb.com: Generación de números aleatorios Javascript . En este artículo hay que fijarse también en el comentario de un visitante que mejora la función de creación de aleatorios.

La función para generar aleatorios que vamos a utilizar entonces es la siguiente:

function aleatorio(inferior,superior){
   numPosibilidades = superior - inferior
   aleat = Math.random() * numPosibilidades
   aleat = Math.floor(aleat)
   return parseInt(inferior) + aleat
}


Como nosotros necesitamos un aleatorio hexadecinal, para apoyarnos en esta función, vamos a generar un número aleatorio en decimal, que luego convertiremos a hexadecimal. Para hacer esa conversión utilizaremos un array de valores hexadecimales como este:

hexadecimal = new Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F")

Ahora, para obtener ese valor aleatorio hexadecimal, lo único que tenemos que hacer es obtener un índice entre 0 y el número de casillas de este array. Entonces, el valor aleatorio hexadecimal será lo que haya en el array en la casilla cuyo índice se ha obtenido aleatoriamente. Esto se hace de esta manera:

posarray = aleatorio(0,hexadecimal.length)
valor_hexadecimal_aleatorio = hexadecimal[posarray]


En la primera línea se obtiene el índice del array aleatorio, que está entre 0 y el número de posiciones del array. En la segunda valor_hexadecimal_aleatorio se obtendrá accediendo al array, en la posición generada aleatoriamente.

Obtener el color aleatorio

Ahora que ya hemos visto una manera de obtener un valor hexadecimal aleatorio, vamos a ver cómo obtener un color aleatorio, que no es más que obtener 6 valores hexadecimales aleatorios y concatenarlos.

hexadecimal = new Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F")
color_aleatorio = "#";
for (i=0;i<6;i++){
   posarray = aleatorio(0,hexadecimal.length)
   color_aleatorio += hexadecimal[posarray]
}

Después de la ejecución de este código, la variable color_aleatorio contendrá el color generado aleatoriamente.

Ponerlo en una función

Para acabar esta pequeña práctica, vamos a ver cómo se puede poner todo esto en una función, que podremos utilizar en cualquier contexto.

function dame_color_aleatorio(){
   hexadecimal = new Array("0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F")
   color_aleatorio = "#";
   for (i=0;i<6;i++){
      posarray = aleatorio(0,hexadecimal.length)
      color_aleatorio += hexadecimal[posarray]
   }
   return color_aleatorio
}


Para ver este ejemplo en marcha hemos creado una página que muestra una serie de 50 colores generados aleatoriamente.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

Evangelina

26/5/2015
Grax
Gracias, me ha servido muchisimo n___n

Cristian

25/10/2016
Colores al azar
Muchas gracias, esta muy bueno el algoritmo, te dejo uno mas simplificado, saludos.

function color()
{
var r = Math.round(Math.random()*255);
var g = Math.round(Math.random()*255);
var b = Math.round(Math.random()*255);
var a = 1; //transparencia entre 0 a 1
return this.rgba = "rgba("+r+", "+g+", "+b+", "+a+")";
}

mrojas6996

08/9/2018
¡Muchas gracias!
El material me sirvió bastante, altamente agradecido con ustedes.