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;
}

例:()から値を返したい場合は、minとmax1,2,3,4,5を選択する必要があります。15

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() * 40(包括的)から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 に答える