Ich finde, dass das Erzeugen zufälliger Farben dazu neigt, Farben zu erzeugen, die nicht genug Kontrast für meinen Geschmack haben. Der einfachste Weg, dies zu umgehen, besteht darin, eine Liste mit sehr unterschiedlichen Farben vorab auszufüllen. Weisen Sie für jede neue Zeichenfolge die nächste Farbe in der Liste zu:
// Takes any string and converts it into a #RRGGBB color.
var StringToColor = (function(){
var instance = null;
return {
next: function stringToColor(str) {
if(instance === null) {
instance = {};
instance.stringToColorHash = {};
instance.nextVeryDifferntColorIdx = 0;
instance.veryDifferentColors = ["#000000","#00FF00","#0000FF","#FF0000","#01FFFE","#FFA6FE","#FFDB66","#006401","#010067","#95003A","#007DB5","#FF00F6","#FFEEE8","#774D00","#90FB92","#0076FF","#D5FF00","#FF937E","#6A826C","#FF029D","#FE8900","#7A4782","#7E2DD2","#85A900","#FF0056","#A42400","#00AE7E","#683D3B","#BDC6FF","#263400","#BDD393","#00B917","#9E008E","#001544","#C28C9F","#FF74A3","#01D0FF","#004754","#E56FFE","#788231","#0E4CA1","#91D0CB","#BE9970","#968AE8","#BB8800","#43002C","#DEFF74","#00FFC6","#FFE502","#620E00","#008F9C","#98FF52","#7544B1","#B500FF","#00FF78","#FF6E41","#005F39","#6B6882","#5FAD4E","#A75740","#A5FFD2","#FFB167","#009BFF","#E85EBE"];
}
if(!instance.stringToColorHash[str])
instance.stringToColorHash[str] = instance.veryDifferentColors[instance.nextVeryDifferntColorIdx++];
return instance.stringToColorHash[str];
}
}
})();
// Get a new color for each string
StringToColor.next("get first color");
StringToColor.next("get second color");
// Will return the same color as the first time
StringToColor.next("get first color");
Obwohl dies auf nur 64 Farben begrenzt ist, finde ich, dass die meisten Menschen den Unterschied danach sowieso nicht wirklich erkennen können. Ich nehme an, Sie könnten immer mehr Farben hinzufügen.
Während dieser Code fest codierte Farben verwendet, wissen Sie zumindest während der Entwicklung garantiert genau, wie viel Kontrast Sie zwischen den Farben in der Produktion sehen werden.
Die Farbliste wurde aus dieser SO-Antwort entfernt . Es gibt andere Listen mit mehr Farben.