Если я правильно вас понял. Попробуйте функцию ниже. Он возвращает вам коллекцию цветов, если вы передадите что-нибудь и случайное. Но если вы передадите baseColor
, он сгенерирует hue
набор цветов на основе basedColor
. hue
определенные базовые цвета: red
, yellow
, green
, cyan
, blue
и magenta
.
Использование
пример: 1 - getRandomColors(10)
или getRandomColors(10,'random')
или getRandomColors(10,'anything besides Hue')
результат: //(10) ["#C4AD05", "#B63DCB", "#22A9FE", "#59DCAC", "#986FFD", "#493E56", "#49693D", "#83029A", "#59E3C0", "#C6FB84"]
пример: 2 - getRandomColors(10,'blue') //baseColor
результат: //(10) ["hsl(240, 79%, 19%)", "hsl(240, 44%, 45%)", "hsl(240, 13%, 64%)", "hsl(240, 63%, 73%)", "hsl(240, 52%, 45%)", "hsl(240, 61%, 83%)", "hsl(240, 46%, 58%)", "hsl(240, 35%, 6%)", "hsl(240, 89%, 89%)", "hsl(240, 76%, 97%)"]
Код
function getRandomColors(len, baseColor = 'random') {
var colors = [];
var baseValue = getColorValue(baseColor);
var execFn = getExecFn(baseValue);
for (var i = 0; i < len; i++) {
colors.push(execFn());
}
return colors;
function getExecFn(baseColorValue) {
if (baseColorValue == -1) {
return getRandomColor;
}
else {
return hueSet;
}
}
function hueSet() {
h = baseValue;
s = Math.floor(Math.random() * 100);
l = Math.floor(Math.random() * 100);
return 'hsl(' + h + ', ' + s + '%, ' + l + '%)';
}
function getRandomColor() {
var letters = '0123456789ABCDEF';
var color = '#';
for (var i = 0; i < 6; i++) {
color += letters[Math.floor(Math.random() * 16)];
}
return color;
}
function getColorValue(baseColor) {
switch (baseColor.toLowerCase()) {
case 'red':
return 0;
case 'yellow':
return 60;
case 'green':
return 120;
case 'cyan':
return 180;
case 'blue':
return 240;
case 'magenta':
return 300;
default:
return -1;
}
}
}