Зеленые цвета на изображении имеют различные оттенки, а затем уменьшаются в значении (становятся меньше черного) при движении вниз.
Ваш симпатичный генератор цветов randomColor основан на нечетной теории, что цвета, которые проходят череззолотое сечение в цветовом пространстве будет красивее, в основном оно просто гарантирует, что вы будете стремиться к линейным шагам.Но этот код является лицензией CC0 и включает в себя ряд полезных вещей для ваших целей.Сначала они определяют, что такое зеленый.И они определяют, как конвертировать из RGB в HSL.Я бы просто изменил этот код, чтобы сделать линейные шаги через правильные оттенки, а затем в направлении направления строки по значению.
Однако, это будет создавать каждый раз одни и те же цвета, так что вы можете простоопределите список зеленых цветов, которые вам нравятся.
Если вы действительно хотите отсортировать эти цвета, вы можете отсортировать их буквально, просто отсортировав их.Используйте HexToHSB () в коде randomColor, а затем сортируйте значения на основе полученного значения оттенка.Обычно это будут более светлые и яркие цвета, но вы можете ясно видеть менее хаотичный рисунок повсюду.
Все цветовые пространства имеют, как правило, 3 значения, поэтому размещение их в 2d имеет тенденцию быть немного запутанным, так что вы можете такжевыберите одну или две метрики и используйте их.
function HexToHSB(hex) {
hex = hex.replace(/^#/, '');
hex = hex.length === 3 ? hex.replace(/(.)/g, '$1$1') : hex;
var red = parseInt(hex.substr(0, 2), 16) / 255,
green = parseInt(hex.substr(2, 2), 16) / 255,
blue = parseInt(hex.substr(4, 2), 16) / 255;
var cMax = Math.max(red, green, blue),
delta = cMax - Math.min(red, green, blue),
saturation = cMax ? (delta / cMax) : 0;
switch (cMax) {
case red:
return [60 * (((green - blue) / delta) % 6) || 0, saturation, cMax];
case green:
return [60 * (((blue - red) / delta) + 2) || 0, saturation, cMax];
case blue:
return [60 * (((red - green) / delta) + 4) || 0, saturation, cMax];
}
}
var input = 'green'
var colors = randomColor({
count: 200,
hue: input
})
colors = colors.sort(function(a, b) {
var hsva = HexToHSB(a);
var hsvb = HexToHSB(b);
return hsva[0] - hsvb[0];
});
div = document.createElement("div");
document.body.appendChild(div);
colors.forEach(function(element) {
var d = document.createElement("button");
d.style.cssText = 'padding:5px; font-size:22px; width:50px; height:50px; background-color:' + element;
div.appendChild(d);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/randomcolor/0.5.4/randomColor.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>