1

我有这个代码,它只是在每个页面加载时更改 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”。谁能告诉我为什么?

4

3 回答 3

3

您可以使用此功能:

function getRandom(min,max) 
{
    var res =  Math.floor(Math.random() * (max+1 - min) + min);
    return res;
}

示例:如果你想从 ( 1,2,3,4,5) 返回一个值,你应该选择 min1和 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

编辑
希望有所帮助

于 2013-01-05T08:15:04.290 回答
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);
于 2013-01-05T08:09:21.360 回答
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

如您所见,第一个和最后一个数字被提取的可能性较小。

因此,更好的方法是按照此处Math.floor指定的方式使用

于 2013-01-05T08:23:28.893 回答