2010-02-21 105 views
8

我想让jQuery根据数字在我的网站上生成一个随机背景。所以我试图让它产生main1.jpg或main2.jpg并将它作为背景扔进身体。jQuery随机数不工作

由于某些原因,它只生成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 */ 

}); 

感谢, 韦德

回答

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

感谢。你可以告诉我很熟悉jQuery。 – 2010-02-21 01:27:49

+2

@韦德,别担心!对不起,如果我听起来有点侮辱,那么SO是提出问题的地方!你对我做的不同于你的解决方案有任何疑问吗? – 2010-02-21 01:29:40

+2

因为Math.random()可以返回0,所以使用ceil()可能会给出0。而是使用floor:Math.floor((Math.random()* 2)+1) – Meglio 2012-04-17 12:47:04

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 + ")"); 
});