jQuery随机数不起作用

时间:2010-02-21 01:16:53

标签: jquery random numbers

我试图让jQuery根据一个数字在我的网站主体上生成一个随机背景。所以我试图让它生成main1.jpg或main2.jpg并将其作为背景投入到身体中。

由于某种原因,它只生成main2.jpg。这是我的代码:

$(document).ready(function(){

    $("body").css({'background' : 'url(images/main1.jpg)'}).hide();
    $("body").css({'background' : 'url(images/main2.jpg)'}).hide();

    var randomNum = Math.floor(Math.random()*2); /* Pick random number */

    $("body").css({'background' : 'url(images/main:eq(' + randomNum + ').jpg)'}).show(); /* Select div with random number */

});

谢谢, 涉

2 个答案:

答案 0 :(得分:19)

看到你想要做什么是非常令人困惑的。现在你隐藏了两次身体,然后错误地添加了一个css规则,然后显示了身体。如果您只想设置随机背景,请执行以下操作:

$(document).ready(function(){
    var randomNum = Math.ceil(Math.random()*2); /* Pick random number between 1 and 2 */
    $("body").css({'background' : 'url(images/main' + randomNum + '.jpg)'});
});

如果您想要添加两个divs并随机显示一个,请执行以下操作:

$(document).ready(function(){
    /* Pick random number between 1 and 2 */
    var randomNum = Math.ceil(Math.random()*2); 
    $.each([1,2], function(){
       var $div = $('<div class="background" style="background-image: url(images/main' + this + '.jpg)"></div>');
       if( this !== randomNum ) $div.hide();
       $div.appendTo( document.body );
    });
})

答案 1 :(得分:4)

这样做的原因是第一次设置身体背景会覆盖第一次。这相当于:

var s = "hello";
s = "world";
alert(s); // world

你想要的更像是:

// this can contain as many images as you want
var images = ["images/main1.jpg", "images/main2.jpg"];

// preload. This is optional
var preload = new Array(images.length);
for (var i=0; i<images.length; i++) {
  preload[i] = $("<img>").("src", images[i]);
}

// assign one randomly
$(function() {
  var img = images[Math.floor(Math.random() * images.length)];
  $("body").css("background", "url(" + img + ")");
});

您也可以将其调整为仅预加载用于身体背景的一张图像。

var img = images[Math.floor(Math.random() * images.length)];
var preload = $("<img>").attr("src", img);
$(function() {
  $("body").css("background", "url(" + img + ")");
});