Was ist der beste Weg, um eine zufällige Farbe in JavaScript zu generieren, ohne Frameworks zu verwenden ...
Hier sind ein paar Lösungen, die ich mir ausgedacht habe:
function get_random_color()
{
var color = "";
for(var i = 0; i < 3; i++) {
var sub = Math.floor(Math.random() * 256).toString(16);
color += (sub.length == 1 ? "0" + sub : sub);
}
return "#" + color;
}
function get_Rand_color()
{
var color = Math.floor(Math.random() * Math.pow(256, 3)).toString(16);
while(color.length < 6) {
color = "0" + color;
}
return "#" + color;
}
Gibt es bessere Möglichkeiten, dies zu tun?
Ein kürzerer Weg:
'#'+(0x1000000+(Math.random())*0xffffff).toString(16).substr(1,6)
Ich mag die zweite Option, obwohl sie etwas einfacher gemacht werden kann:
// Math.pow is slow, use constant instead.
var color = Math.floor(Math.random() * 16777216).toString(16);
// Avoid loops.
return '#000000'.slice(0, -color.length) + color;
So erstellen Sie eine zufällige Farbe und bieten die minimale Helligkeit:
function randomColor(brightness){
function randomChannel(brightness){
var r = 255-brightness;
var n = 0|((Math.random() * r) + brightness);
var s = n.toString(16);
return (s.length==1) ? '0'+s : s;
}
return '#' + randomChannel(brightness) + randomChannel(brightness) + randomChannel(brightness);
}
Rufen Sie randomColor mit einem Wert von 0-255 auf, um anzugeben, wie hell die Farbe sein soll. Dies ist hilfreich beim Erzeugen von Pastellen, zum Beispiel randomColor(220)
Wie George sagte, ist der beste Weg, HSL zu verwenden, so dass Sie eine Reihe von zufälligen, vom Menschen unterscheidbaren Farben erzeugen können. Die ähnliche Idee wird in Adams Cole answer auf die ähnliche Frage implementiert, aber sein Code enthält einen Zufallsfarbgenerator und einen hsl-> hex rgb-Übersetzer, der zusammengebündelt ist, was es schwer macht, ihn zu verstehen und zu modifizieren.
Wenn Sie eine der JavaScript-Farbmanipulationsbibliotheken (wie jquery-color ) verwenden, wird die Farbgenerierung einfach:
function Rainbow() {
// 30 random hues with step of 12 degrees
var hue = Math.floor(Math.random() * 30) * 12;
return $.Color({
hue: hue,
saturation: 0.9,
lightness: 0.6,
alpha: 1
}).toHexString();
};
Prägnanter:
function get_random_color2()
{
var r = function () { return Math.floor(Math.random()*256) };
return "rgb(" + r() + "," + r() + "," + r() + ")";
}
Diese Antwort ist die beste Methode.
Sie sollten bekannte Farben zur Auswahl bereitstellen, anstatt sich auf rein numerische Methoden zu verlassen. Sie können Sites wie ColorBrewer verwenden, um Farbpaletten auszuwählen, die je nach Problem gut funktionieren (qualitativer Datensatz, quantitative oder was auch immer).
['red','orange','yellow','green','blue','purple'][Math.random()*6|0]
var colors = {
Rainbow: ['red', 'orange', 'yellow', 'green', 'blue', 'purple'],
qual: ['#8dd3c7', '#ffffb3', '#bebada', '#fb8072', '#80b1d3', '#fdb462', '#b3de69', '#fccde5', '#d9d9d9', '#bc80bd', '#ccebc5', '#ffed6f'],
quant: ['#fff7ec', '#fee8c8', '#fdd49e', '#fdbb84', '#fc8d59', '#ef6548', '#d7301f', '#b30000', '#7f0000'],
div: ['#67001f','#b2182b','#d6604d','#f4a582','#fddbc7','#f7f7f7','#d1e5f0','#92c5de','#4393c3','#2166ac','#053061']
};
randc = function(array) {
return array[Math.random() * array.length | 0]
}
genc = function() {
var frag = [];
var arr = colors[$("select").val()];
for (var i = 0; i < 1024; i++) {
frag.Push("<div style='background-color:" + randc(arr) + ";'></div>");
}
$("#demo").html(frag.join(''));
}
genc();
$("select").on("change", genc);
#demo {
margin-top: 10px;
font-size: 0;
}
#demo div {
display: inline-block;
width: 24px;
height: 24px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select>
<option value='qual'>Qualitative (categorical)</option>
<option value='quant'>Quantitative (sequential)</option>
<option value='div'>Divergent (republicans versus democrats)</option>
<option value='Rainbow'>Rainbow (my little pony)</option>
</select>
<div id='demo'></div>
Ich habe es so gemacht, mit Hilfe anderer Antworten:
'#' + parseInt(Math.random() * 0xffffff).toString(16)
function randomColor()
{
color='rgb('+Math.round(Math.random()*255)+','+Math.round(Math.random()*255)+','+Math.round(Math.random()*255)+')';
return color;
}
Dies gibt einen zufälligen RGB-Wert zurück.
Am knackigsten:
function get_random_color()
{
return '#' + Math.random().toString(16).substring(4);
}
Nicolas Buduroi gab den oben genannten besten Code, um bei Random Color-Generator in Javascript zufällige Farbe zu erhalten
Ich habe eine etwas kompliziertere Lösung entwickelt, mit der Sie die Sättigung der Farben und die Helligkeit steuern können. Den Code für SwitchColors.js finden Sie hier https://github.com/akulmehta/SwitchColors.js