2010-02-21 143 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 + ")"); 
});