Uważam, że generowanie przypadkowych kolorów ma tendencję do tworzenia kolorów, które nie mają wystarczającego kontrastu dla mojego gustu. Najłatwiejszym sposobem obejścia tego problemu jest wstępne wypełnienie listy bardzo różnych kolorów. Do każdego nowego ciągu przypisz kolejny kolor na liście:
// 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");
Chociaż ma to limit tylko do 64 kolorów, uważam, że większość ludzi i tak nie jest w stanie odróżnić różnicy po tym. Przypuszczam, że zawsze możesz dodać więcej kolorów.
Podczas gdy ten kod używa kolorów zakodowanych na stałe, masz przynajmniej gwarancję, że podczas programowania dokładnie wiesz, jaki dokładnie kontrast zobaczysz między kolorami podczas produkcji.
Lista kolorów została usunięta z tej odpowiedzi SO , istnieją inne listy z większą liczbą kolorów.