在我的JavaScript文件中,我有一套由一封信和一個數字組成的夫婦eache,例如:{(A,5), (B,7), ..., (Z,3)}
。根據一些集合創建隨機顏色的方法
對於每一對夫妻(A,x)
我有我的HTML與style = "background-color: {{object.color}}"
x divs。
我想寫隨機計算x的顏色對於每個對(A,X),使得方法:
- 每種顏色就足以不同於其它區分他們。
- 同一對夫婦的每種顏色都足以接近這對夫婦。
例如:我有這對夫婦:{(A,5), (B,4), (C,10)}
所以我在我的html中有19個div。對於集合A的所有5個div,我計算藍色色彩的顏色,對於集合B的所有4個div我計算綠色色彩的顏色,並且對於集合C的所有10個div我計算紅色色彩。
當然你不知道的夫婦通過提前:)
有沒有一種方法使用上的CSS或類似這樣的東西每種顏色的RGB值,這樣做可能?
目前,我只做了一個方法,我完全隨機選擇每種顏色,只避免顏色太黑或太白,並用循環保證已採取的顏色不能採取兩次:
function(){
var cb=0;
var cr=0;
var cg=0;
var minEcart=40;
var testB=true;
var cptI=0;
while(testB){
testB=false;
cr=Math.round(Math.random()*170) + 85;
cb=Math.round(Math.random()*170) + 85;
cg=Math.round(Math.random()*170) + 85;
for(var j=0; j<$scope.colorAlreadyGiven.length;j++){
if(($scope.colorAlreadyGiven[j][0]-cb>=-minEcart)&&
($scope.colorAlreadyGiven[j][0]-cb<=minEcart)&&
($scope.colorAlreadyGiven[j][1]-cg>=-minEcart)&&
($scope.colorAlreadyGiven[j][1]-cg<=minEcart)&&
($scope.colorAlreadyGiven[j][2]-cr>=-minEcart)&&
($scope.colorAlreadyGiven[j][2]-cr<=minEcart)){
testB=true;
cptI++;
if(cptI>=50){
testB=false;
}
}
}
}
$scope.colorAlreadyGiven.push([cb,cg,cr]);
return "#"+(cb+cg*256+cr*65536).toString(16);
}
感謝您的關注。
目前我有一種方法可以選擇隨機的顏色,避免那些太黑或太白的顏色,並且有一個循環以確保任何已經選取的顏色都不能被第二次選取,但是我發現沒有任何東西可以將顏色保留在特定的範圍內,以便知道我是從哪個集合中選取的 –
@LyxtheLyxos - 提示:不要在RGBA色彩空間中工作。在HSLA工作。這樣,只有一個組件對色調或顏色負責,對飽和度或顏色數量是另一個組件,對於亮度或亮度/黑度爲第三,對於Alpha值爲最後一個,這可能是100%(完全不透明)用於你的用例。這裏有一個HSLA顏色選擇器的例子:http://standardista.com/webkit/ch7/hsla.html注意比RGBA更加人性化嗎? ;) – enhzflep