我试图得到这样的东西: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 )
-周围放上括号()时,效果好多了。
为什么会这样呢?
4条答案
按热度按时间jgzswidk1#
@Xufox在那里的评论里有正确的答案。为了清楚起见,你需要稍微调整一下代码(让我们也来修复那个错误,由于
+1
,你永远不会为任何通道获得零):wgmfuz8q2#
当你在一个字符串中使用
+1
时,它将生成字符串而不是数学表达式,当你使用()
时,它将生成数学表达式。我的建议:
使用参数随机颜色
icnyk63a3#
当你“添加”
1
时,它被连接成一个字符串,因为你是从"rgb(" +
开始的,结果“string+
number”将是另一个字符串。将数值表达式 Package 在括号中使+
运算符执行加法而不是连接。你得到
255
的原因是因为你生成的数字最终看起来像这样:backgroundColor
设置器将8位值(范围从0到255)的上限设置为最大255
(最小0
)。这意味着,设置element.style.backgroundColor = "rgb(10000, -10000, 128)"
将导致backgroundColor
为"rgb(255, 0, 128)"
因此,当
Math.floor(Math.random() * 255)
生成一个从1
到25
的数时,最高的结果数变为251
,低于255
。任何其他值 - 即从26
到255
-都会 导致比255
更高的值,因此它会自动变为255
。圆括号使算术表达式在串联之前进行计算。
aij0ehis4#