Dada essa função, desejo substituir a cor por um gerador de cores aleatório.
document.overlay = GPolyline.fromEncoded({
color: "#0000FF",
weight: 10,
points: encoded_points,
zoomFactor: 32,
levels: encoded_levels,
numLevels: 4
});
Como eu posso fazer isso?
javascript
random
colors
n00ki3
fonte
fonte
0.001
seguida resultado é"#4189"
(cor inválido - 4 dígitos)'#'+Math.random().toString(16).substr(2,6)
(fonte: CodeGolf )Respostas:
Use
getRandomColor()
no lugar de"#0000FF"
:fonte
Math.round(Math.random()*15)
são apenas 1:30, enquanto as chances dos outros números são 1:15.Duvido que algo seja mais rápido ou mais curto que este:
Desafio!
fonte
'#'+(Math.random()*0xFFFFFF<<0).toString(16);
('00000'+(Math.random()*(1<<24)|0).toString(16)).slice(-6)
sempre retornará um comprimento de 6. embora esse método ainda (raramente) retorne pequenos números que dão resultados como000cf4
ou0000a7
que são um pouco hacky, eu acho. nesses casos, o componente vermelho não contribui para a cor aleatória.Aqui está outra opinião sobre esse problema.
Meu objetivo era criar cores vibrantes e distintas. Para garantir que as cores sejam distintas, evito usar um gerador aleatório e seleciono cores "espaçadas igualmente" no arco-íris.
Isso é perfeito para criar marcadores pop-out no Google Maps que tenham uma "exclusividade" ideal (ou seja, dois marcadores não terão cores semelhantes).
Se você deseja ver como isso fica em ação, consulte http://blog.adamcole.ca/2011/11/simple-javascript-rainbow-color.html .
fonte
Quem pode vencê-lo?
Garantido para trabalhar o tempo todo: http://jsbin.com/OjELIfo/2/edit
Com base no comentário @eterps, o código acima ainda pode gerar seqüências mais curtas se a representação hexadecimal da cor aleatória for muito curta (
0.730224609375
=>0.baf
)Este código deve funcionar em todos os casos:
fonte
0.730224609375 = 0x3fe75e0000000000, 0.43603515625 = 0x3fdbe80000000000, 0.957763671875 = 0x3feea60000000000
. Quase nenhuma mantissa está sendo usada! São apenas frações glorificadas. Uma saída adequada de '12 dígitos 'produziria resultados como:0.347876714234 = 0x3fd6439cb1ab32ac, 0.447556256665 = 0x3fdca4c2ff5fc450
Math.random()
de baixa qualidade usados sob o capô (os quais, suponho, são responsáveis pelos resultados da @ etertp) pelos melhores, então esses tipos de números aleatórios de baixa qualidade devem ser uma coisa do passado agora.Não há necessidade de um hash de letras hexadecimais. O JavaScript pode fazer isso sozinho:
fonte
Você também pode usar o HSL disponível em todos os bons navegadores ( http://caniuse.com/#feat=css3-colors )
Isso fornecerá apenas cores brilhantes. Você pode brincar com brilho, saturação e alfa.
fonte
'hsla(' + (Math.floor(Math.random()*360) + ', 100%, 70%, 1)'
Eu gosto deste:
'#' + (Math.random().toString(16) + "000000").substring(2,8)
fonte
'#' + Math.floor(Math.random()*16777215).toString(16);
'#' + (0.125).toString(16).substring(2, 8) === '#2'
. É perigoso porque a probabilidade é baixa (1 em 4096, eu acho), portanto é provável que um bug seja submetido ao teste. Você deveria ('#' + Math.random().toString(16) + "000000").substring(2, 8)
'#' + (Math.random().toString(16) + "000000").substring(2,8)
Geração aleatória de cores com controle de brilho:
fonte
fonte
Math.random()
retorno0.125
, em seguida resultado será#0.2
(cor inválida) (você precisa adicionar algum estofamento em vez fatia)O artigo escrito por Paul Irish no Random Hex Color Code Generator em JavaScript é absolutamente incrível. Usar:
Aqui está o link da fonte:
http://www.paulirish.com/2009/random-hex-color-code-snippets/
fonte
0.00001
seguida resultado é#a7
(cor inválido)'#' + Math.floor(Math.random()*16777215).toString(16).padStart(6, '0')
Aqui está uma reviravolta na solução fornecida pela @Anatoliy.
Eu precisava gerar apenas cores claras (para planos de fundo), então usei o formato de três letras (#AAA):
fonte
Se você é um noob como eu, sem noção sobre hexadecimais e coisas assim, isso pode ser mais intuitivo.
Você só precisa terminar com uma string como
'rgb(255, 123, 220)'
fonte
Isso pode ser facilmente encontrado usando a Pesquisa do Google:
Versão atualizada:
fonte
Resposta curta com teclado para o tamanho exato
'#'+((1<<24)*(Math.random()+1)|0).toString(16).substr(1)
fonte
Um detalhamento de como isso funciona:
Math.random()*256
obtém um número aleatório (ponto flutuante) de 0 a 256 (inclusive 0 a 255)Resultado do exemplo: 116.15200161933899
Adicionando as
|0
tiras de tudo depois do ponto decimal.Ex: 116.15200161933899 -> 116
Usar
.toString(16)
converte esse número em hexadecimal (base 16).Ex: 116 -> 74
Outro ex: 228 -> e4
Adicionar
"0"
almofadas com um zero. Isso será importante quando obtivermos a substring, pois nosso resultado final deve ter dois caracteres para cada cor.Ex: 74 -> 074
Outro ex: 8 -> 08
.substr(-2)
recebe apenas os dois últimos caracteres.Ex: 074 -> 74
Outro ex: 08 -> 08 (se não o tivéssemos adicionado
"0"
, isso teria produzido "8" em vez de "08")O
for
loop executa esse loop três vezes, adicionando cada resultado à sequência de cores, produzindo algo como isto:#7408e4
fonte
Portanto, embora todas as respostas aqui sejam boas, eu queria um pouco mais de controle sobre a saída. Por exemplo, eu gostaria de evitar tons quase brancos, garantindo cores vibrantes e brilhantes e não tons desbotados.
Então agora eu posso especificar 3 intervalos arbitrários para escolher os valores rgb. Você pode chamá-lo sem argumentos e obter meu conjunto padrão, que geralmente gera uma cor bastante vibrante com uma sombra dominante óbvia, ou pode fornecer sua própria variedade de intervalos.
fonte
O comentário mais votado da resposta principal sugere que a abordagem de Martin Ankerl é melhor que os números hexadecimais aleatórios e, embora eu não tenha melhorado a metodologia de Ankerl, eu a traduzi com sucesso para JavaScript. Eu imaginei que postaria uma resposta adicional para esse segmento SO já de tamanho mega, porque a resposta principal tem outro comentário vinculado a um Gist com a implementação JS da lógica de Ankerl e esse link está quebrado (404). Se eu tivesse reputação, teria simplesmente comentado o link jsbin que criei.
https://jsbin.com/qeyevoj/edit?js,console
fonte
Para uma aleatoriedade decente.
Cor aleatória
Alfa aleatória, cor aleatória.
fonte
Existem muitas maneiras de conseguir isso. Aqui estão alguns que eu fiz:
Gera seis dígitos hexadecimais aleatórios (0-F)
Uma linha extremamente curta
Gera componentes HEX individuais (00-FF)
Sequência hexadecimal com engenharia excessiva (os XORs 3 saem juntos para formar cores)
fonte
0.125
seguida resultado é#0.2
(cor inválido)0.125
=3FC0000000000000
em hexadecimal IEEE. 3 dígitos hexadecimais são expoente, 13 são mantissa. Há uma chance de 1 em 4,5 quadrilhões de que a mantissa esteja completamente vazia assim. Testei 100 milhões de vezes no Firefox / Chrome. Você está apenas tentando quebrá-lo;). nuncaMath.random
deve lhe dar 0,125. E se isso acontecer, há um problema com o PRNG, que não é meu problema. Frações como 0,5, 0,25, 0,0625 etc. são inúteis, elas não contêm aleatoriedade. Talvez você tenha uma solução para esse caso extremo, hm? ;)'#'+Math.random().toString(16).split('.')[1].slice(-6).padStart(6,0)
mas eu prefiro isso #Outro gerador aleatório de cores:
fonte
Array.prototype.reduce
torna muito limpo.Precisa de um calço para navegadores antigos.
fonte
Você poderia usar esta função simples
fonte
0.001
o resultado é"#4189"
(cor inválida, 4 dígitos) #http://jsfiddle.net/XmqDz/1/
fonte
Use cores distintas .
Ele gera uma paleta de cores visualmente distintas.
cores distintas é altamente configurável:
fonte
Aqui estão minhas duas versões para um gerador aleatório de código hexadecimal.
fonte
Essa função vai acima e além de outras respostas de duas maneiras:
Ele tenta gerar cores o mais distintas possível, descobrindo qual das 20 tentativas tem a maior distância euclidiana das outras no cone do HSV
Ele permite restringir o matiz, a saturação ou o intervalo de valores, mas ainda tenta escolher cores o mais distintas possível dentro desse intervalo.
Não é super eficiente, mas por valores razoáveis (quem pode escolher 100 cores facilmente?) É rápido o suficiente.
Veja JSFiddle
fonte
Quase todos os métodos anteriores de mão curta estão gerando códigos hexadecimais inválidos (cinco dígitos). Me deparei com uma técnica semelhante apenas sem esse problema aqui :
Teste
Tente isso no console:
fonte
0.00001
o resultado é"#000a7"
(cor inválido - 5 dígitos)Minha versão:
fonte
0
torna a cor nãorandom
o suficiente XD0
paraffffff
. Qual é uma distribuição uniforme perfeita . Esse zero é apenas para concluir a sequência, devido a considerações de uso do navegador. Eu sugiro que você pareça mais cuidadoso com esta solução.map (retorna sempre a cor rgb válida)
Mostrar snippet de código
fonte
Você pode usar o colorchain.js para gerar uma sequência de cores com tons variados.
fonte