在每个页面加载时显示不同的图像

时间:2013-01-05 08:05:11

标签: javascript

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

3 个答案:

答案 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.99993.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
相关问题