Dada esta función, quiero reemplazar el color con un generador de color aleatorio.
document.overlay = GPolyline.fromEncoded({
color: "#0000FF",
weight: 10,
points: encoded_points,
zoomFactor: 32,
levels: encoded_levels,
numLevels: 4
});
¿Cómo puedo hacerlo?
javascript
random
colors
n00ki3
fuente
fuente
0.001
resultado es aleatorio , el resultado es"#4189"
(color no válido - 4 dígitos)'#'+Math.random().toString(16).substr(2,6)
(fuente: CodeGolf )Respuestas:
Uso
getRandomColor()
en lugar de"#0000FF"
:fuente
Math.round(Math.random()*15)
son solo 1:30, mientras que las posibilidades de los otros números son 1:15.Dudo que algo sea más rápido o más corto que este:
¡Desafío!
fuente
'#'+(Math.random()*0xFFFFFF<<0).toString(16);
('00000'+(Math.random()*(1<<24)|0).toString(16)).slice(-6)
siempre devolverá una longitud de 6. aunque este método todavía (rara vez) devolverá números pequeños que dan resultados como000cf4
o0000a7
que es un poco raro, creo. en estos casos el componente rojo no contribuye al color aleatorio.Aquí hay otra versión de este problema.
Mi objetivo era crear colores vibrantes y distintos. Para garantizar que los colores sean distintos, evito usar un generador aleatorio y selecciono colores "uniformemente espaciados" del arco iris.
Esto es perfecto para crear marcadores emergentes en Google Maps que tengan una "unicidad" óptima (es decir, no habrá dos marcadores con colores similares).
Si desea ver cómo se ve esto en acción, consulte http://blog.adamcole.ca/2011/11/simple-javascript-rainbow-color.html .
fuente
¿Quién puede vencerlo?
Garantizado para trabajar todo el tiempo: http://jsbin.com/OjELIfo/2/edit
Según el comentario de @eterps, el código anterior aún puede generar cadenas más cortas si la representación hexadecimal del color aleatorio es muy corta (
0.730224609375
=>0.baf
)Este código debería funcionar en todos los casos:
fuente
0.730224609375 = 0x3fe75e0000000000, 0.43603515625 = 0x3fdbe80000000000, 0.957763671875 = 0x3feea60000000000
. ¡Casi nada de la mantisa se está utilizando! Son solo fracciones glorificadas. Un adecuado salida '12 dígitos' produciría resultados como:0.347876714234 = 0x3fd6439cb1ab32ac, 0.447556256665 = 0x3fdca4c2ff5fc450
Math.random()
(que debo asumir que es responsable de los resultados de @etertp) por otros mejores, por lo que esos tipos de números aleatorios de baja calidad deberían ser cosa del pasado ahora.No hay necesidad de un hash de letras hexadecimales. JavaScript puede hacer esto por sí mismo:
fuente
También puede usar HSL disponible en todos los buenos navegadores ( http://caniuse.com/#feat=css3-colors )
Esto solo le dará colores brillantes, puede jugar con el brillo, la saturación y el alfa.
fuente
'hsla(' + (Math.floor(Math.random()*360) + ', 100%, 70%, 1)'
Me gusta este:
'#' + (Math.random().toString(16) + "000000").substring(2,8)
fuente
'#' + Math.floor(Math.random()*16777215).toString(16);
'#' + (0.125).toString(16).substring(2, 8) === '#2'
. Es peligroso porque la probabilidad es baja (creo que 1 de cada 4096), por lo que es probable que un error pase las pruebas. Deberías ('#' + Math.random().toString(16) + "000000").substring(2, 8)
'#' + (Math.random().toString(16) + "000000").substring(2,8)
Generación de color aleatorio con control de brillo:
fuente
fuente
Math.random()
devuelve0.125
, el resultado será#0.2
(color no válido) (debe agregar algo de relleno en lugar de un corte)El artículo escrito por Paul Irish sobre Random Hex Color Code Generator en JavaScript es absolutamente increíble. Utilizar:
Aquí está el enlace de origen:
http://www.paulirish.com/2009/random-hex-color-code-snippets/
fuente
0.00001
resultado es aleatorio , el resultado es#a7
(color no válido)'#' + Math.floor(Math.random()*16777215).toString(16).padStart(6, '0')
Aquí hay un giro en la solución provista por @Anatoliy.
Necesitaba generar solo colores claros (para fondos), así que elegí el formato de tres letras (#AAA):
fuente
Si eres un novato como yo, ni idea de hexadecimales y demás, esto podría ser más intuitivo.
Solo necesita terminar con una cadena como
'rgb(255, 123, 220)'
fuente
Esto se puede encontrar fácilmente con la Búsqueda de Google:
Versión actualizada:
fuente
Respuesta corta con almohadilla al tamaño exacto
'#'+((1<<24)*(Math.random()+1)|0).toString(16).substr(1)
fuente
Un desglose de cómo funciona esto:
Math.random()*256
obtiene un número aleatorio (punto flotante) de 0 a 256 (0 a 255 inclusive)Resultado del ejemplo: 116.15200161933899
Agregar las
|0
tiras de todo después del punto decimal.Ej: 116.15200161933899 -> 116
El uso
.toString(16)
convierte este número a hexadecimal (base 16).Ej: 116 -> 74
Otro ex: 228 -> e4
Agregar
"0"
pads con un cero. Esto será importante cuando obtengamos la subcadena, ya que nuestro resultado final debe tener dos caracteres para cada color.Ej: 74 -> 074
Otro ej .: 8 -> 08
.substr(-2)
obtiene solo los dos últimos caracteres.Ej: 074 -> 74
Otro ej .: 08 -> 08 (si no hubiéramos agregado el
"0"
, esto habría producido "8" en lugar de "08")El
for
ciclo ejecuta este ciclo tres veces, agregando cada resultado a la cadena de color, produciendo algo como esto:#7408e4
fuente
Entonces, aunque todas las respuestas aquí son buenas, quería un poco más de control sobre la salida. Por ejemplo, me gustaría evitar los tonos casi blancos, al tiempo que me aseguro de obtener colores brillantes y vibrantes que no se desvanezcan.
Entonces ahora puedo especificar 3 rangos arbitrarios para elegir valores rgb. Puede llamarlo sin argumentos y obtener mi conjunto predeterminado que generalmente generará un color bastante vibrante con un tono dominante una vez obvio, o puede proporcionar su propia gama de rangos.
fuente
El comentario más votado de la respuesta superior sugiere que el enfoque de Martin Ankerl es mejor que los números hexadecimales aleatorios, y aunque no he mejorado la metodología de Ankerl, lo he traducido con éxito a JavaScript. Pensé que publicaría una respuesta adicional a este hilo SO ya de gran tamaño porque la respuesta principal tiene otro comentario que se vincula a un Gist con la implementación JS de la lógica de Ankerl y ese enlace está roto (404). Si tuviera la reputación, simplemente habría comentado el enlace jsbin que creé.
https://jsbin.com/qeyevoj/edit?js,console
fuente
Por aleatoriedad decente.
Color aleatorio
Alfa aleatorio, color aleatorio.
fuente
Hay muchas maneras de lograr esto. Aquí hay algunos que hice:
Genera seis dígitos hexadecimales aleatorios (0-F)
Una línea extremadamente corta
Genera componentes HEX individuales (00-FF)
Cadena hexadecimal sobrediseñada (XOR 3 salidas juntas para formar color)
fuente
0.125
resultado es aleatorio , el resultado es#0.2
(color no válido)0.125
=3FC0000000000000
en hexadecimal IEEE. 3 dígitos hexadecimales son exponentes, 13 son mantisa. Hay una probabilidad de 1 en 4.5 billones de que la mantisa esté completamente vacía de esa manera. Probé 100m veces en Firefox / Chrome. Solo estás tratando de romperlo;). nuncaMath.random
debería darte 0,125. Y si lo hace, hay un problema con el PRNG, que no es mi problema. Las fracciones como 0.5, 0.25, 0.0625 etc. son inútiles, no contienen aleatoriedad. Quizás tengas una solución para este caso extremo, ¿eh? ;)'#'+Math.random().toString(16).split('.')[1].slice(-6).padStart(6,0)
pero prefiero estoOtro generador de color aleatorio:
fuente
Array.prototype.reduce
lo hace muy limpioNecesita una cuña para los navegadores antiguos.
fuente
Podrías usar esta función simple
fuente
0.001
el resultado es aleatorio, el resultado es"#4189"
(color no válido 4 dígitos)http://jsfiddle.net/XmqDz/1/
fuente
Usa colores distintos .
Genera una paleta de colores visualmente distintos.
distintos colores es altamente configurable:
fuente
Aquí están mis dos versiones para un generador de código hexadecimal aleatorio.
fuente
Esta función va más allá de otras respuestas de dos maneras:
Intenta generar colores lo más distintos posible al encontrar qué color de 20 intentos tiene la distancia euclidiana más lejana de los otros en el cono HSV
Le permite restringir el tono, la saturación o el rango de valores, pero aún intenta elegir colores lo más distintos posible dentro de ese rango.
No es súper eficiente, pero para valores razonables (¿quién podría incluso separar 100 colores fácilmente?) Es lo suficientemente rápido.
Ver JSFiddle
fuente
Casi todos los métodos anteriores de mano corta generan códigos hexadecimales no válidos (cinco dígitos). Encontré una técnica similar solo sin ese problema aquí :
Prueba
Prueba esto en la consola:
fuente
0.00001
el resultado es aleatorio, el resultado es"#000a7"
(color no válido - 5 dígitos)Mi version:
fuente
0
hace que el color no searandom
suficiente XD0
affffff
. Que es una distribución uniforme perfecta . Ese cero es solo para completar la cadena, debido a consideraciones de uso del navegador. Le sugiero que tenga más cuidado con esta solución.mapa (devuelve color rgb siempre válido)
Mostrar fragmento de código
fuente
Puede usar colorchain.js para generar una secuencia de colores con distintos tonos.
fuente