【问题标题】:jQuery Random Number Not WorkingjQuery随机数不起作用
【发布时间】:2011-01-19 06:01:59
【问题描述】:

我正在尝试让 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 */

});

谢谢, 韦德

【问题讨论】:

    标签: jquery random numbers


    【解决方案1】:

    这样做的原因是第一次调用设置正文背景会覆盖第一次。相当于做:

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

    【讨论】:

      【解决方案2】:

      看到您正在尝试做的事情非常令人困惑。现在你隐藏了身体两次,然后错误地添加了一个 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 );
          });
      })
      

      【讨论】:

      • 谢谢。你可以说我很了解 jQuery。
      • @Wade,别担心!抱歉,如果我听起来完全是侮辱性的,那么这里就是您提出问题的地方!您对我所做的与您的解决方案不同有任何疑问吗?
      • 因为 Math.random() 可以返回 0,所以使用 ceil() 可能会返回 0。而是使用 floor: Math.floor((Math.random()*2)+1)
      猜你喜欢
      • 1970-01-01
      • 2014-05-12
      • 2010-11-05
      • 1970-01-01
      • 2021-03-29
      • 2013-04-13
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多