我有这个代码,它只是在每个页面加载时更改4个图像。
<HEAD>
<script language="Javascript">
function RandomizeImage()
{
var imagesarray = new Array("001.png", "002.png", "003.png", "004.png")
var randomnumber = Math.round(Math.random()*(imagesarray.length - 1))
document.images.someimage.src = imagesarray[randomnumber]
}
</script>
<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.js"></script>
</HEAD>
<BODY onload="RandomizeImage()" bgcolor="#000000">
<div id="bg">
<IMG name="someimage" src="001.png" border="0" onclick="location.href='mailto:me@xxx.com?Subject=Hello'" id="bgg">
</div>
</BODY>
然而,在大多数页面重新加载时,我得到图像“001.png”或“002.png”。谁能告诉我为什么?
答案 0 :(得分:3)
您可以使用此功能:
function getRandom(min,max)
{
var res = Math.floor(Math.random() * (max+1 - min) + min);
return res;
}
示例:如果您想从(1,2,3,4,5
)返回值,则应选择min 1
和max 5
。
var rImage = '00'+getRandom(1,5)+'.png';
console.log(rImage);
// output: 001.png or 002.png or 003.png or 004.png or 005.png
<强>被修改强>
希望能帮助
答案 1 :(得分:2)
使用Math.floor()
代替.round()
,不要从长度中减去1:
var randomnumber = Math.floor(Math.random() * imagesarray.length);
修改: Math.random() * 3
会为我们提供介于0(含)和3(独家)之间的数字。使用Math.round()
导致每个数字的值:
0: 0.0 — 0.4999
1: 0.5 — 1.4999
2: 1.5 — 2.4999
3: 2.5 — 2.9999
你可以看到高和低数字的每一个被选为中间数字的概率的一半。这是因为您永远不会获得-0.5 — -0.9999
或3.0 — 3.4999
范围内的数字,这些数字的一半是被选中的可能性的一半。
Math.floor()
消除了这个问题,因为所有数字都在该范围内。 Math.random() * 4
将给出0(含)和4(不包括)之间的数字。使用Math.floor()
导致每个数字的值:
0: 0.0 — 0.9999
1: 1.0 — 1.9999
2: 2.0 — 2.9999
3: 3.0 — 3.9999
您可能会发现使用此实用程序功能很有用:
function randomInt(max, min) {
min = min || 0;
var Max = Math.max(max, min) + 1;
var Min = Math.min(max, min);
return Math.floor(Math.random() * (Max - Min)) + Min;
}
关于这个函数的好处是参数的顺序无关紧要,min
是可选的。请注意,由于此函数中包含max
,因此您需要从数组长度中减去1:
var randomnumber = randomInt(imagesarray.length - 1);
答案 2 :(得分:1)
Math.round有这个效果:
0 <= x < 0.5 => 0
0.5 <= x < 1.5 => 1
1.5 <= x < 2.5 => 2
..
(n-0.5) <= x < n => n
正如您所看到的那样,第一个和最后一个数字的获取概率较小。
因此,更好的方法是使用指定here
的Math.floor