生成一个随机的种子十六进制颜色

Generate a random seeded hex color?

本文关键字:随机 种子 十六进制 颜色 一个      更新时间:2023-09-26

我使用'#'+Math.floor(Math.random()*16777215).toString(16);在按键上生成随机的十六进制颜色。

当按下小写alpha键时,用于改变背景颜色。

我想把这段代码改为由keycode播种。我该怎么做呢?

我尝试了'#'+Math.floor(e.which*16777215).toString(16);,但这产生了一个7个字符的代码,而不是6?

说明你想要一个"种子"我假设你希望每次按下相同的键时都是相同的颜色。不幸的是,你不能在JavaScript中控制Math.random()种子,因为它不像其他语言那样接受种子作为参数。

你可以像这样生成一个随机的十六进制数字:

Math.floor((Math.abs(Math.sin(seed) * 16777215))).toString(16);

这应该为ASCII范围内的所有内容生成一个唯一的数字,但是有些颜色可能非常相似。

function genColor (seed) {
  color = Math.floor((Math.abs(Math.sin(seed) * 16777215)));
  color = color.toString(16);
  // pad any colors shorter than 6 characters with leading 0s
  while(color.length < 6) {
    color = '0' + color;
  }
  return color;
}
let tableHTML = '';
for (let i=32; i < 127; i++) {
  color = genColor(i);
  tableHTML += `<tr style="background:#${color}"><td>${String.fromCharCode(i)}</td><td>#${color}</td></tr>`;
}
tableHTML = `<table>${tableHTML}</table>`;
$('#test').bind('keypress', function (evt) {
    $(this).css('background', '#' + genColor(evt.which));
});
$('body').append(tableHTML);
#out, p, input { margin: 1em }
table {border-collapse: separate}
td {padding: 1em; border: 3px solid #fff; color: #fff; text-shadow: 0px 0px 3px #000}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="out">Type in the input box to change its background color :<input id="test">
    <p>Below is a list of colors generated for ASCII 32 through 126</p>
</div>

您正在获得7字母代码,因为您正在处理一个不能用十六进制6字符表示的数字。

16777215(以10为基数)在16为基数时为FFFFFF。如果您的十进制数增大任何,将使用另一个十六进制字母/数字来表示它。

让你的代码工作,只要确保16777215是最高的。

222似乎是最高的键码可能(请纠正我,如果我错了):

Math.floor(e.which * 16777215 / 222).toString(16);

一个简单的JavaScript代码是:

function getRandomColor() {
        var letters = '0123456789ABCDEF'.split('');
        var color = '#';
        for (var i = 0; i < 6; i++ ) {
            color += letters[Math.round(Math.random() * 15)];
        }
        return color;
    }

您可以在这里看到它的工作原理:http://sweb1.dmit.nait.ca/~bkoepke1/Random%20Colour%20Generator/

一个十六进制色码有3个组件,从00到FF连接成一个字符串。它不仅仅是一个6个十六进制字符的数字。所以一个随机颜色生成器应该是这样的:

function randomHexColor() {
    var x, c = '#';
    var i = 3;
    while (i--) {
     x = (Math.random()*256|0).toString(16).toUpperCase();
     c += (x.length < 2? '0' : '') + x;
    }
    return c;
}

根据需要添加播种