我是java-script的新手。每当我调用特定函数时,我都需要获得随机背景色。
我在网上找到了以下代码,但我不太明白它是如何工作的。
代码:
function getRandomColor () {
var hex = Math.floor(Math.random() * 0xFFFFFF);
return "#" + ("000000" + hex.toString(16)).substr(-6);
}
上面的代码是如何工作的。我理解Math.random()是如何工作的,但hex.toString(16)).substr(-6)
基本上是什么意思?
有人可以向我说明上述代码是如何运作的。
答案 0 :(得分:20)
function getRandomColor () {
var hex = Math.floor(Math.random() * 0xFFFFFF);
return "#" + ("000000" + hex.toString(16)).substr(-6);
}
hex.toString(16)
将十六进制转换为基数16
中的字符串数字表示。
<强>语法:强>
number.toString(radix)
radix:
用于表示数值的基础。必须是2到36之间的整数。
2 - The number will show as a binary value
8 - The number will show as an octal value
16 - The number will show as an hexadecimal value
substr(-6)
只占用最后6个字符,这会切断"000000"
,因为它们不属于最后6个字符。
答案 1 :(得分:7)
hex.toString(16)
将hex
转换为基本16
中的字符串数字表示形式。然后它在字符串的开头附加000000
以确保它至少是长度为6.并且substr(-6)
获取结果字符串的最后6个字符。这样你总能获得#
+ 6个十六进制字符。代表颜色。
答案 2 :(得分:1)
代码首先选择一个随机数并使用“&amp; 0xFFFFFF”技术确保范围为0到16777215.
一旦我们得到那个随机数,我们使用“.toString(16)”方法转换为十六进制,16表示我们需要十六进制转换。
现在,我们可以认为我们有一个6位数的十六进制随机数用于我们的颜色但是知道“.toString(16)”方法不会为我们做任何填充。
例如,如果随机数为255(十六进制为FF),则不能使用它,因为它不是精确的6位数。
一种方法是进行字符串长度检查,并将相应数量的0添加到'FF'的开头,以获得'0000FF'。
在这里,我们看到另一种技术,你会看到固定数量的0添加到字符串中,然后固定长度被截断结束,确保你获得6位数并正确填充。
我一直使用字符串长度检查或特定的填充函数(我不知道javascript是否有一个) - 我只回答了这个问题,以便完全理解这个问题中显示的技术。
答案 3 :(得分:-1)
/* a complete html page to apply this */
<html>
<body>
<button type="button" onclick="setbodybgcolor()">Random Background</button>
<script>
function setbodybgcolor(){
document.body.style.backgroundColor=getRandomColor ();
}
function getRandomColor () {
var hex = Math.floor(Math.random() * 0xFFFFFF);
return "#" + (hex.toString(16)).substr(-6);
}
/* we can do this also
function setbodybgcolor(){
var hex=Math.floor(Math.random()*16777215).toString(16);
document.body.style.backgroundColor="#"+hex;
}*/
</script>
</body>
</html>