Mit dieser Funktion möchte ich die Farbe durch einen zufälligen Farbgenerator ersetzen .
document.overlay = GPolyline.fromEncoded({
color: "#0000FF",
weight: 10,
points: encoded_points,
zoomFactor: 32,
levels: encoded_levels,
numLevels: 4
});
Wie kann ich es tun?
javascript
random
colors
n00ki3
quelle
quelle
0.001
dann Ergebnis ist"#4189"
(ungültige Farbe - 4 Ziffern)'#'+Math.random().toString(16).substr(2,6)
(Quelle: CodeGolf )Antworten:
Verwendung
getRandomColor()
anstelle von"#0000FF"
:quelle
Math.round(Math.random()*15)
betragen nur 1:30, während die Chancen der anderen Zahlen 1:15 betragen.Ich bezweifle, dass etwas schneller oder kürzer sein wird als dieses:
Herausforderung!
quelle
'#'+(Math.random()*0xFFFFFF<<0).toString(16);
('00000'+(Math.random()*(1<<24)|0).toString(16)).slice(-6)
wird immer eine Länge von 6 zurückgeben, obwohl diese Methode immer noch (selten) kleine Zahlen zurückgibt , die Ergebnisse wie000cf4
oder0000a7
die ein bisschen hackig sind, denke ich. In diesen Fällen trägt die rote Komponente nicht zur zufälligen Farbe bei.Hier ist eine andere Sichtweise auf dieses Problem.
Mein Ziel war es, lebendige und unverwechselbare Farben zu kreieren. Um sicherzustellen, dass die Farben unterschiedlich sind, vermeide ich die Verwendung eines Zufallsgenerators und wähle "gleichmäßig verteilte" Farben aus dem Regenbogen aus.
Dies ist ideal zum Erstellen von Popout-Markierungen in Google Maps mit optimaler "Eindeutigkeit" (dh keine zwei Markierungen haben ähnliche Farben).
Wenn Sie sehen möchten, wie dies in Aktion aussieht, lesen Sie http://blog.adamcole.ca/2011/11/simple-javascript-rainbow-color.html .
quelle
Wer kann es schlagen?
Garantiert die ganze Zeit zu arbeiten: http://jsbin.com/OjELIfo/2/edit
Basierend auf dem Kommentar von @eterps kann der obige Code immer noch kürzere Zeichenfolgen erzeugen, wenn die hexadezimale Darstellung der zufälligen Farbe sehr kurz ist (
0.730224609375
=>0.baf
).Dieser Code sollte in allen Fällen funktionieren:
quelle
0.730224609375 = 0x3fe75e0000000000, 0.43603515625 = 0x3fdbe80000000000, 0.957763671875 = 0x3feea60000000000
. Kaum eine der Mantissen wird benutzt! Sie sind nur verherrlichte Brüche. Eine korrekte 12-stellige Ausgabe würde zu folgenden Ergebnissen führen:0.347876714234 = 0x3fd6439cb1ab32ac, 0.447556256665 = 0x3fdca4c2ff5fc450
Math.random()
(von denen ich annehmen muss, dass sie für die Ergebnisse von @ etertp verantwortlich sind), durch bessere ersetzt haben. Daher sollten diese Arten von Zufallszahlen von geringer Qualität der Vergangenheit angehören jetzt.Es ist kein Hash mit hexadezimalen Buchstaben erforderlich. JavaScript kann dies selbst tun:
quelle
Sie können HSL auch in jedem guten Browser verwenden ( http://caniuse.com/#feat=css3-colors ).
Dies gibt Ihnen nur helle Farben, Sie können mit der Helligkeit, Sättigung und Alpha herumspielen.
quelle
'hsla(' + (Math.floor(Math.random()*360) + ', 100%, 70%, 1)'
Ich mag dieses:
'#' + (Math.random().toString(16) + "000000").substring(2,8)
quelle
'#' + Math.floor(Math.random()*16777215).toString(16);
'#' + (0.125).toString(16).substring(2, 8) === '#2'
. Es ist gefährlich, weil die Wahrscheinlichkeit gering ist (1 in 4096, glaube ich), so dass ein Fehler wahrscheinlich durch Tests kommt. Sie sollten ('#' + Math.random().toString(16) + "000000").substring(2, 8)
'#' + (Math.random().toString(16) + "000000").substring(2,8)
Zufällige Farberzeugung mit Helligkeitsregelung:
quelle
quelle
Math.random()
Rückgabe erfolgt,0.125
ist das Ergebnis#0.2
(ungültige Farbe) (Sie müssen etwas Polster anstelle der Scheibe hinzufügen)Der Artikel von Paul Irish über Random Hex Color Code Generator in JavaScript ist absolut erstaunlich. Verwenden:
Hier ist der Quelllink:
http://www.paulirish.com/2009/random-hex-color-code-snippets/
quelle
0.00001
dann Ergebnis ist#a7
(ungültige Farbe)'#' + Math.floor(Math.random()*16777215).toString(16).padStart(6, '0')
Hier ist eine Variante der von @Anatoliy bereitgestellten Lösung.
Ich musste nur helle Farben (für Hintergründe) erzeugen, also habe ich mich für das Drei-Buchstaben-Format (#AAA) entschieden:
quelle
Wenn Sie ein Noob wie ich sind und keine Ahnung von Hexadezimalen und dergleichen haben, ist dies möglicherweise intuitiver.
Sie müssen nur mit einer Zeichenfolge wie enden
'rgb(255, 123, 220)'
quelle
Dies kann sehr einfach mit der Google-Suche gefunden werden:
Aktualisierte Version:
quelle
Kurze Antwort mit Block auf exakte Größe
'#'+((1<<24)*(Math.random()+1)|0).toString(16).substr(1)
quelle
Eine Aufschlüsselung, wie dies funktioniert:
Math.random()*256
erhält eine Zufallszahl (Gleitkommazahl) von 0 bis 256 (0 bis einschließlich 255)Beispielergebnis: 116.15200161933899
Fügen Sie die
|0
Streifen von allem nach dem Dezimalpunkt hinzu.Beispiel: 116.15200161933899 -> 116
Mit
.toString(16)
konvertiert diese Zahl in hexadezimal (Basis 16).Beispiel: 116 -> 74
Ein weiteres Beispiel: 228 -> e4
Hinzufügen
"0"
Pads es mit einer Null. Dies ist wichtig, wenn wir den Teilstring erhalten, da unser Endergebnis zwei Zeichen für jede Farbe haben muss.Beispiel: 74 -> 074
Ein weiteres Beispiel: 8 -> 08
.substr(-2)
bekommt nur die letzten beiden Zeichen.Beispiel: 074 -> 74
Ein weiteres Beispiel: 08 -> 08 (wenn wir das nicht hinzugefügt hätten
"0"
, hätte dies "8" anstelle von "08" ergeben)Die
for
Schleife führt diese Schleife dreimal aus und fügt jedes Ergebnis der Farbzeichenfolge hinzu, wodurch Folgendes erzeugt wird:#7408e4
quelle
Obwohl alle Antworten hier gut sind, wollte ich etwas mehr Kontrolle über die Ausgabe. Zum Beispiel möchte ich nahezu weiße Farbtöne vermeiden und gleichzeitig sicherstellen, dass ich helle, lebendige Farben erhalte, die nicht ausgewaschen sind.
Jetzt kann ich 3 beliebige Bereiche angeben, aus denen RGB-Werte ausgewählt werden sollen. Sie können es ohne Argumente aufrufen und meinen Standardsatz erhalten, der normalerweise eine ziemlich lebendige Farbe mit einem einmal offensichtlich dominanten Farbton erzeugt, oder Sie können Ihre eigene Reihe von Bereichen angeben.
quelle
Der am besten bewertete Kommentar der Top-Antwort deutet darauf hin, dass Martin Ankerls Ansatz besser ist als zufällige Hex-Zahlen, und obwohl ich Ankerls Methodik nicht verbessert habe, habe ich ihn erfolgreich in JavaScript übersetzt. Ich dachte, ich würde eine zusätzliche Antwort auf diesen bereits mega-großen SO-Thread posten, da die oberste Antwort einen weiteren Kommentar enthält, der auf einen Gist mit der JS-Implementierung von Ankerls Logik verweist, und dieser Link ist unterbrochen (404). Wenn ich den Ruf hätte, hätte ich einfach den von mir erstellten jsbin-Link kommentiert.
https://jsbin.com/qeyevoj/edit?js,console
quelle
Für anständige Zufälligkeit.
Zufällige Farbe
Zufälliges Alpha, zufällige Farbe.
quelle
Es gibt so viele Möglichkeiten, dies zu erreichen. Hier sind einige, die ich gemacht habe:
Erzeugt sechs zufällige Hex-Ziffern (0-F)
Extrem kurzer Einzeiler
Erzeugt einzelne HEX-Komponenten (00-FF)
Überentwickelte Hex-Zeichenfolge (XORs 3 gibt zusammen aus, um Farbe zu bilden)
quelle
0.125
Ergebnisse#0.2
0.125
=3FC0000000000000
in IEEE hex. 3 hexadezimale Ziffern sind Exponenten, 13 sind Mantissen. Es besteht eine Wahrscheinlichkeit von 1 zu 4,5 Billiarden, dass die Mantisse so vollständig leer ist. Ich habe 100m mal in Firefox / Chrome getestet. Du versuchst nur es zu brechen;).Math.random
sollte dir niemals 0,125 geben. Und wenn ja, gibt es ein Problem mit dem PRNG, das nicht mein Problem ist. Brüche wie 0,5, 0,25, 0,0625 usw. sind nutzlos, sie enthalten keine Zufälligkeit. Vielleicht haben Sie eine Lösung für diesen extremen Randfall, hm? ;)'#'+Math.random().toString(16).split('.')[1].slice(-6).padStart(6,0)
aber ich bevorzuge diesNoch ein zufälliger Farbgenerator:
quelle
Array.prototype.reduce
macht es sehr sauber.Benötigt eine Unterlegscheibe für alte Browser.
quelle
Sie können diese einfache Funktion verwenden
quelle
0.001
das Ergebnis"#4189"
(ungültige Farbe 4 Ziffern)http://jsfiddle.net/XmqDz/1/
quelle
Verwenden Sie unterschiedliche Farben .
Es wird eine Palette von visuell unterschiedlichen Farben erzeugt.
eindeutige Farben sind hoch konfigurierbar:
quelle
Hier sind meine beiden Versionen für einen zufälligen Hex-Code-Generator.
quelle
Diese Funktion geht in zweierlei Hinsicht über andere Antworten hinaus:
Es wird versucht, möglichst unterschiedliche Farben zu erzeugen, indem ermittelt wird, welche Farbe aus 20 Versuchen den weitesten euklidischen Abstand zu den anderen im HSV-Kegel aufweist
Sie können den Farbton, die Sättigung oder den Wertebereich einschränken, versuchen jedoch weiterhin, Farben auszuwählen, die innerhalb dieses Bereichs so unterschiedlich wie möglich sind.
Es ist nicht sehr effizient, aber für vernünftige Werte (wer könnte sogar 100 Farben leicht auseinander nehmen?) Ist es schnell genug.
Siehe JSFiddle
quelle
Fast alle bisherigen Kurzhandmethoden generieren ungültige Hex-Codes (fünf Ziffern). Ich bin hier nur ohne dieses Problem auf eine ähnliche Technik gestoßen :
Prüfung
Versuchen Sie dies in der Konsole:
quelle
0.00001
das Ergebnis"#000a7"
(ungültige Farbe - 5 Stellen)Meine Version:
quelle
0
macht die Farbe nichtrandom
genug XD0
bisffffff
. Welches ist eine perfekte gleichmäßige Verteilung . Diese Null dient aus Gründen der Browsernutzung nur zum Vervollständigen der Zeichenfolge. Ich schlage vor, Sie schauen sich diese Lösung genauer an.map (gibt immer gültige RGB-Farbe zurück)
Code-Snippet anzeigen
quelle
Sie können colorchain.js verwenden , um eine Folge von Farben mit unterschiedlichen Farbtönen zu generieren.
quelle