使用JavaScript的随机RGB颜色生成器

dbf7pr2w  于 2023-05-16  发布在  Java
关注(0)|答案(4)|浏览(214)

我试图得到这样的东西:rbg(random,random,random);
现在当我把Math.floor(Math.random() * 255) + 1放进这个区域时,它可以工作,但由于某种原因,大多数数字都停留在255,很少改变。
我的代码是:

function colorGen() {   
  document.getElementById("color1").style.backgroundColor = 'rgb('+ 
  Math.floor(Math.random() * 255) + 1 + ',' + Math.floor(Math.random() * 255) + 1 
  +',' + Math.floor(Math.random() * 255) + 1 +')';
}

当我在-( Math.floor(Math.random() * 255) + 1 )-周围放上括号()时,效果好多了。
为什么会这样呢?

jgzswidk

jgzswidk1#

@Xufox在那里的评论里有正确的答案。为了清楚起见,你需要稍微调整一下代码(让我们也来修复那个错误,由于+1,你永远不会为任何通道获得零):

function colorGen() {
  const r = Math.floor(Math.random() * 256);
  const g = Math.floor(Math.random() * 256);
  const b = Math.floor(Math.random() * 256);
  document.getElementById("color1").style.backgroundColor = "rgb(" + r + "," + g + "," + b + ")";
}
wgmfuz8q

wgmfuz8q2#

当你在一个字符串中使用+1时,它将生成字符串而不是数学表达式,当你使用()时,它将生成数学表达式。
我的建议:
使用参数随机颜色

function colorGen() {   
  var color1=Math.floor(Math.random() * 255) + 1;
  var color2=Math.floor(Math.random() * 255) + 1;
  var color3=Math.floor(Math.random() * 255) + 1;
  document.getElementById("color1").style.backgroundColor = 'rgb('+ color1
   + ',' +  color2
  +',' + color3 +')';
}
<button id="color1" onclick="colorGen()">click me to change color</button>
icnyk63a

icnyk63a3#

当你“添加”1时,它被连接成一个字符串,因为你是从"rgb(" +开始的,结果“string+number”将是另一个字符串。将数值表达式 Package 在括号中使+运算符执行加法而不是连接。
你得到255的原因是因为你生成的数字最终看起来像这样:

11
  21
  31
  41
   …
2531
2541
2551

backgroundColor设置器将8位值(范围从0到255)的上限设置为最大255(最小0)。这意味着,设置element.style.backgroundColor = "rgb(10000, -10000, 128)"将导致backgroundColor"rgb(255, 0, 128)"
因此,当Math.floor(Math.random() * 255)生成一个从125的数时,最高的结果数变为251,低于255。任何其他值 - 即从26255 -都会 导致比255更高的值,因此它会自动变为255
圆括号使算术表达式在串联之前进行计算。

aij0ehis

aij0ehis4#

let rgb = []
for (let i = 0; i < 3; i++) {
    let randNum = Math.floor(Math.random()*256)
    rgb.push(randNum)
}
let rgbToString = ` rgb(${rgb.join()})`
console.log(rgbToString)

相关问题