基于javascript中的字符串创建自定义颜色方案
我正在尝试制作一个网络图表,根据不同的人的名字,以不同的颜色显示不同的人,这将是一致的名字 例如,如果我的资源之一是“Jane Doe”,她可能会被计算成深蓝色,“John Smith”可能是某种浅绿色 这里的诀窍是,我需要让Jane和John在图表中出现的地方的颜色保持一致,但要与图表上的其他名字明显不同 有时候这张图表只有几个人,有时候它实际上会很忙,所以根据一些有限的集合分配颜色方案对我来说似乎是个坏主意 此外,我需要使前景颜色与背景颜色形成良好的对比,以便图表易于阅读基于javascript中的字符串创建自定义颜色方案,javascript,function,colors,Javascript,Function,Colors,我正在尝试制作一个网络图表,根据不同的人的名字,以不同的颜色显示不同的人,这将是一致的名字 例如,如果我的资源之一是“Jane Doe”,她可能会被计算成深蓝色,“John Smith”可能是某种浅绿色 这里的诀窍是,我需要让Jane和John在图表中出现的地方的颜色保持一致,但要与图表上的其他名字明显不同 有时候这张图表只有几个人,有时候它实际上会很忙,所以根据一些有限的集合分配颜色方案对我来说似乎是个坏主意 此外,我需要使前景颜色与背景颜色形成良好的对比,以便图表易于阅读 我如何在网页中做到
我如何在网页中做到这一点?我设想了两个javascript函数:
getBackColor(name)
和getForeColor(name)
,但我不同意是否有更好的方法来实现这一点。我会使用名称中字符的ascii值来生成颜色。这样,每个名字都会有不同的颜色。你可以尝试的一件事是取一个名字,然后用MD5散列。这将为您提供一个较大的十六进制值,但您可以去掉前6个字符并将其用作颜色
有很多JavaScript MD5库,但这里有一个我以前使用过的库,它工作得很好:我不确定是否可以帮助您,但是如果在类似的场景中: 我将创建一个函数,从名称中获取颜色。此功能需要完成以下任务:
1. Return the same results with the same name every time.
2. Be relatively random.
在这种情况下,类似的方法应该会起作用:
function getColorFromName(name) {
var red = 0;
for (var i = 0; i < name.length; i++) {
red += name.charCodeAt(i);
}
red = red % 255;
var green = 0;
for (var j = 0; j < name.length; j++) {
green += j * name.charCodeAt(j);
}
green = green % 255;
var blue = 1;
for (var k = 0; k < name.length; k++) {
blue = blue * name.charCodeAt(k);
}
blue = blue % 255;
return 'rgb(' + red + ',' + green + ',' + blue + ')';
}
函数getColorFromName(name){
var-red=0;
对于(var i=0;i将模256这个词的所有ascii值相加,每个名称都有不同的颜色(可以这么说)。您可以将名称分成3部分,然后进行256模运算并应用RGB值。这是我的想法,可能有更好的解决方案。这是一个很好的解决方案,取决于需要生成多少颜色,也可能有点昂贵。我喜欢这个想法;这有点贵,但我敢打赌我能做得到。