Compte tenu de cette fonction, je veux remplacer la couleur par un générateur de couleurs aléatoire.
document.overlay = GPolyline.fromEncoded({
color: "#0000FF",
weight: 10,
points: encoded_points,
zoomFactor: 32,
levels: encoded_levels,
numLevels: 4
});
Comment puis-je le faire?
javascript
random
colors
n00ki3
la source
la source
0.001
résultat est"#4189"
(couleur non valide - 4 chiffres)'#'+Math.random().toString(16).substr(2,6)
(source: CodeGolf )Réponses:
Utilisation
getRandomColor()
à la place de"#0000FF"
:la source
Math.round(Math.random()*15)
ne sont que de 1h30, tandis que les chances des autres numéros sont de 1h15.Je doute que quelque chose soit plus rapide ou plus court que celui-ci:
Défi!
la source
'#'+(Math.random()*0xFFFFFF<<0).toString(16);
('00000'+(Math.random()*(1<<24)|0).toString(16)).slice(-6)
retournera toujours une longueur de 6. bien que cette méthode retourne toujours (rarement) de petits nombres qui donnent des résultats comme000cf4
ou0000a7
qui est un peu hacky je pense. dans ces cas, la composante rouge ne contribue pas à la couleur aléatoire.Voici une autre vision de ce problème.
Mon objectif était de créer des couleurs vives et distinctes. Pour m'assurer que les couleurs sont distinctes, j'évite d'utiliser un générateur aléatoire et sélectionne des couleurs "régulièrement espacées" de l'arc-en-ciel.
Ceci est parfait pour créer des marqueurs pop-out dans Google Maps qui ont une "unicité" optimale (c'est-à-dire qu'aucun deux marqueurs n'auront des couleurs similaires).
Si vous souhaitez voir à quoi cela ressemble en action, voir http://blog.adamcole.ca/2011/11/simple-javascript-rainbow-color.html .
la source
Qui peut le battre?
Garantie de travailler tout le temps: http://jsbin.com/OjELIfo/2/edit
D'après le commentaire de @eterps, le code ci-dessus peut toujours générer des chaînes plus courtes si la représentation hexadécimale de la couleur aléatoire est très courte (
0.730224609375
=>0.baf
)Ce code devrait fonctionner dans tous les cas:
la source
0.730224609375 = 0x3fe75e0000000000, 0.43603515625 = 0x3fdbe80000000000, 0.957763671875 = 0x3feea60000000000
. Presque aucune mantisse n'est utilisée! Ce ne sont que des fractions glorifiées. Une sortie correcte à 12 chiffres produirait des résultats tels que:0.347876714234 = 0x3fd6439cb1ab32ac, 0.447556256665 = 0x3fdca4c2ff5fc450
Math.random()
(dont je dois présumer qu'ils sont responsables des résultats de @ etertp) par de meilleurs, donc ces types de nombres aléatoires de faible qualité devraient être une chose du passé maintenant.Vous pouvez également utiliser HSL disponible sur tous les bons navigateurs ( http://caniuse.com/#feat=css3-colors )
Cela ne vous donnera que des couleurs vives, vous pouvez jouer avec la luminosité, la saturation et l'alpha.
la source
'hsla(' + (Math.floor(Math.random()*360) + ', 100%, 70%, 1)'
Il n'y a pas besoin d'un hachage de lettres hexadécimales. JavaScript peut le faire par lui-même:
la source
J'aime celui la:
'#' + (Math.random().toString(16) + "000000").substring(2,8)
la source
'#' + Math.floor(Math.random()*16777215).toString(16);
'#' + (0.125).toString(16).substring(2, 8) === '#2'
. C'est dangereux car la probabilité est faible (1 sur 4096 je pense) donc un bug est susceptible de passer au travers des tests. Vous devriez ('#' + Math.random().toString(16) + "000000").substring(2, 8)
'#' + (Math.random().toString(16) + "000000").substring(2,8)
Génération aléatoire des couleurs avec contrôle de la luminosité:
la source
la source
Math.random()
retour,0.125
le résultat sera#0.2
(couleur invalide) (vous devez ajouter du rembourrage à la place)L'article écrit par Paul Irish sur Random Hex Color Code Generator en JavaScript est absolument incroyable. Utilisation:
Voici le lien source:
http://www.paulirish.com/2009/random-hex-color-code-snippets/
la source
0.00001
résultat est#a7
(couleur invalide)'#' + Math.floor(Math.random()*16777215).toString(16).padStart(6, '0')
Voici un tour sur la solution fournie par @Anatoliy.
Je n'avais besoin de générer que des couleurs claires (pour les arrière-plans), j'ai donc opté pour un format à trois lettres (#AAA):
la source
Si vous êtes un noob comme moi, ignorant les hexadécimaux et autres, cela pourrait être plus intuitif.
Vous avez juste besoin de vous retrouver avec une chaîne telle que
'rgb(255, 123, 220)'
la source
Cela peut être trouvé très facilement en utilisant la recherche Google:
Version mise à jour:
la source
Réponse courte avec tampon à la taille exacte
'#'+((1<<24)*(Math.random()+1)|0).toString(16).substr(1)
la source
Une ventilation de comment cela fonctionne:
Math.random()*256
obtient un nombre aléatoire (virgule flottante) de 0 à 256 (0 à 255 inclus)Exemple de résultat: 116.15200161933899
Ajouter les
|0
bandes de tout après la virgule décimale.Ex: 116.15200161933899 -> 116
L'utilisation
.toString(16)
convertit ce nombre en hexadécimal (base 16).Ex: 116 -> 74
Autre ex: 228 -> e4
L'ajout de
"0"
tampons avec un zéro. Cela sera important lorsque nous obtiendrons la sous-chaîne, car notre résultat final doit avoir deux caractères pour chaque couleur.Ex: 74 -> 074
Un autre ex: 8 -> 08
.substr(-2)
obtient uniquement les deux derniers caractères.Ex: 074 -> 74
Un autre ex: 08 -> 08 (si nous n'avions pas ajouté le
"0"
, cela aurait produit "8" au lieu de "08")La
for
boucle exécute cette boucle trois fois, ajoutant chaque résultat à la chaîne de couleurs, produisant quelque chose comme ceci:#7408e4
la source
Donc, bien que toutes les réponses ici soient bonnes, je voulais un peu plus de contrôle sur la sortie. Par exemple, j'aimerais éviter les nuances de blanc proche, tout en m'assurant d'obtenir des couleurs vives et vives et non délavées.
Alors maintenant, je peux spécifier 3 plages arbitraires pour choisir des valeurs RVB. Vous pouvez l'appeler sans argument et obtenir mon jeu par défaut qui générera généralement une couleur assez vibrante avec une teinte dominante évidente, ou vous pouvez fournir votre propre tableau de plages.
la source
Le commentaire le plus voté de la réponse du haut suggère que l'approche de Martin Ankerl est meilleure que les nombres hexadécimaux aléatoires, et bien que je n'ai pas amélioré la méthodologie d'Ankerl, je l'ai traduite avec succès en JavaScript. J'ai pensé que je publierais une réponse supplémentaire à ce thread SO déjà de grande taille, car la réponse du haut a un autre commentaire lié à un Gist avec l'implémentation JS de la logique d'Ankerl et ce lien est rompu (404). Si j'avais eu la réputation, j'aurais simplement commenté le lien jsbin que j'ai créé.
https://jsbin.com/qeyevoj/edit?js,console
la source
Pour un hasard décent.
Couleur aléatoire
Alpha aléatoire, couleur aléatoire.
la source
Il y a tellement de façons d'y parvenir. En voici quelques-unes que j'ai faites:
Génère six chiffres hexadécimaux aléatoires (0-F)
Une doublure extrêmement courte
Génère des composants HEX individuels (00-FF)
Chaîne hexagonale sur-conçue (XORs 3 sorties ensemble pour former la couleur)
la source
0.125
résultat est#0.2
(couleur invalide)0.125
=3FC0000000000000
dans l'hex IEEE. 3 chiffres hexadécimaux sont exposants, 13 sont des mantisses. Il y a 1 chance sur 4,5 quadrillions que la mantisse soit complètement vide comme ça. J'ai testé 100m fois dans Firefox / Chrome. Vous essayez juste de le casser;). neMath.random
devrait jamais vous donner 0,125. Et si c'est le cas, il y a un problème avec le PRNG, ce qui n'est pas mon problème. Des fractions comme 0,5, 0,25, 0,0625, etc. sont inutiles, elles ne contiennent aucun caractère aléatoire. Peut-être avez-vous une solution à ce cas extrême, hm? ;)'#'+Math.random().toString(16).split('.')[1].slice(-6).padStart(6,0)
mais je préfère celaEncore un autre générateur de couleurs aléatoires:
la source
Array.prototype.reduce
le rend très propre.A besoin d'une cale pour les anciens navigateurs.
la source
Vous pouvez utiliser cette fonction simple
la source
0.001
le résultat est aléatoire, le résultat est"#4189"
(couleur non valide à 4 chiffres)http://jsfiddle.net/XmqDz/1/
la source
Utilisez des couleurs distinctes .
Il génère une palette de visuellement couleurs distinctes.
distinct-colors est hautement configurable:
la source
Voici mes deux versions pour un générateur de code hexadécimal aléatoire.
la source
Cette fonction va au-delà des autres réponses de deux manières:
Il tente de générer des couleurs aussi distinctes que possible en trouvant quelle couleur sur 20 essais a la distance euclidienne la plus éloignée des autres dans le cône HSV
Il vous permet de restreindre la teinte, la saturation ou la plage de valeurs, mais tente toujours de choisir des couleurs aussi distinctes que possible dans cette plage.
Ce n'est pas super efficace, mais pour des valeurs raisonnables (qui pourrait même séparer facilement 100 couleurs?) C'est assez rapide.
Voir JSFiddle
la source
Presque toutes les méthodes précédentes à main courte génèrent des codes hexadécimaux invalides (cinq chiffres). Je suis tombé sur une technique similaire uniquement sans ce problème ici :
Tester
Essayez ceci dans la console:
la source
0.00001
le résultat est"#000a7"
(couleur invalide - 5 chiffres)Ma version:
la source
0
rend la couleurrandom
insuffisante XD0
àffffff
. Ce qui est une distribution uniforme parfaite . Ce zéro ne sert qu'à compléter la chaîne, en raison de considérations d'utilisation du navigateur. Je vous suggère de regarder plus attentivement cette solution.carte (retourne toujours une couleur RVB valide)
Afficher l'extrait de code
la source
Vous pouvez utiliser colorchain.js pour générer une séquence de couleurs avec différentes teintes.
la source