如何在 javascript 中生成随机灰色

How to generate random grey colors in javascript

我有一个函数,只想生成灰色。我怎样才能用下面的代码做到这一点?我是 javascript 的新手!我将不胜感激任何帮助。我正在使用 Paper.js

 function onMouseDown(event) {
        path = new Path();
        path.fillColor = {
            hue: Math.random() * 360,
            //saturation: 0,
            //brightness: 0.5
        };

        path.add(event.point);
    }

您可以使用 randomColor 库。

要生成随机灰色,它将是:

randomColor({hue: 'monochrome', count: 1});

但是,这也包括黑色。您可以将亮度键设置为 "light" 以仅获得真正的灰色。

randomColor({hue: 'monochrome',luminosity: 'light', count: 1});

一个小演示,模拟我们在 GitHub 存储库中找到的彩球:

var colours = randomColor({
  hue: 'monochrome',
  count: 5,
  luminosity: 'light'
});

var myDiv = document.getElementById('squares');

colours.forEach(function(colour) {
  myDiv.innerHTML += `<span class="circle" style="color:${colour}"></span>`
});
.circle:before {
  content: ' CF';
  font-size: 100px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/randomcolor/0.5.2/randomColor.min.js"></script>


<div id="squares">

</div>

由于灰色具有相等的 RGB 分量,您可以生成 0 - ff 范围内的十六进制并将其用于每个 R、G、B 部分:

function randomGreyHex() {
  var v = (Math.random()*(256)|0).toString(16);//bitwise OR. Gives value in the range 0-255 which is then converted to base 16 (hex).
  return "#" + v + v + v;
}

/* demo usage: */
var div = document.querySelector("div");
div.addEventListener("click", function() {
  var grey = randomGreyHex();
  this.style.backgroundColor = grey;
  this.innerHTML = grey;
});
div {
  height: 100px;
  border: 1px solid red;
  text-shadow: 0 0 10px white;
}
<div id="div">click me</div>

由于您提供的示例接受 HSB 颜色,因此您可以简单地生成一个随机亮度值。饱和度应为 0(完全去饱和),色调也可以为 0,因为它是多余的。

亮度值应该是介于 0 和 1 之间的数字。由于您特别需要灰色,因此您可能希望获得既不太暗也不太亮的值。我们可以做一个小方法来return两个值之间的随机数。

function getRandomInRange(min, max) {
  return Math.random() * (max - min) + min;
}

所以在你的代码中你会像这样使用它:

function onMouseDown(event) {
    path = new Path();
    path.fillColor = {
        hue: 0, 
        saturation: 0,
        brightness: getRandomInRange(0.2, 0.8)
    };

    path.add(event.point);
}

更新

Paper.js 有一个 Color constructor specifically for greyscale 也适合在这里使用。它采用 0 - 1 之间的数字(其中 0 为黑色),因此 getRandomInRange 在这里同样有效:

path.fillColor = new Color(getRandomInRange(0.2, 0.8)); //a random grey