【问题标题】:JavaScript, How to change the background of a div tag every x secondsJavaScript,如何每 x 秒更改 div 标签的背景
【发布时间】:2013-08-21 02:28:32
【问题描述】:

我正在尝试编写一些 JavaScript 代码来每 X 秒更改两个 div 标签的背景。这是我的代码:

HTML

<div id="bg_left"></div>
<div id="bg_right"></div>

CSS 身体{ 高度:100%; }

#bg_left{
   height:100%;
   width:50%;
   left:0;
   position:fixed;
   background-position:left;
}
#bg_right{
    height:100%;
    width:50%;
    right:0;
    position:fixed;
    background-image:url(http://presotto.daterrawebdev.com/d/img/pp_hey_you_bg.png);
    background-position:right;
}  

JAVA 脚本

 function carousel_bg(id) {
     var bgimgs = [  'pp_hey_you_bg.png', 'burningman_bg.png' ]; 
     var img1 = bgimgs[id];
     var img2 = bgimgs[id+1];
     var cnt = 2; 

     $('#bg_left').css("background-image", "url(http://presotto.daterrawebdev.com/d/img/"+img1+")");
     $('#bg_right').css("background-image", "url(http://presotto.daterrawebdev.com/d/img/"+img2+")");

     id = id + 1;
     if (id==cnt) id = 0;

     setTimeout("carousel_bg("+id+")", 10000); 
 }

 $(document).ready(function() {
        carousel_bg(0);     
 });

​ 背景图像应该是随机变化的,但它们甚至根本没有变化。

【问题讨论】:

  • 您刚刚做了哪些修改?请说明其他人何时积极尝试解决此问题。
  • 对不起。我更改了 img1 的 var img 并添加了一个变量并将其命名为 img2。我还将 $(body').css("backgrou... 更改为 $('#bg_left').css(".. 并为 #bg_right 添加了一项操作。
  • 请不要通过在标题中添加“未解决:”来“碰撞”您的问题。未解决的问题已经在视觉上显示出来了。
  • 好的..没问题。明白了。
  • 所以...只是想了解这里发生了什么。在我们讨论代码问题之前,还有什么需要做的吗?我对 StackOverflow 规则不是很熟悉,但我可以接受。

标签: javascript jquery css background-image


【解决方案1】:

好的,我在您的 jsFiddle 中看到了问题。因为您将字符串传递给setTimeout(),所以该字符串将仅在顶级范围内进行评估。但是,您传递的函数名称不在顶级范围内(它位于 jsFiddle 的 onload 处理程序中)。因此,我更改了您的 JS 在 jsFiddle 中的定位方式,因此它现在位于顶级范围内。我还修复了选择图像的逻辑,它现在可以在这里工作:http://jsfiddle.net/jfriend00/awVYP/

而且,这是一个清理后的版本,它不将字符串传递给 setTimeout()(编写 javascript 的更好方法),它传递一个本地函数并使用闭包来跟踪当前索引:http://jsfiddle.net/jfriend00/LVGNN/

    function carousel_bg(id) {
        var bgimgs = [  'pp_hey_you_bg.png', 'burningman_bg.png' ]; // add images here..

        function next() {
            if (id >= bgimgs.length) {
                id = 0;
            }
            var img1 = bgimgs[id];
            id++;
            if (id >= bgimgs.length){
                id = 0;
            }
            var img2 = bgimgs[id];

            $('#bg_left').css("background-image", "url(http://presotto.daterrawebdev.com/d/img/"+img1+")");
            $('#bg_right').css("background-image", "url(http://presotto.daterrawebdev.com/d/img/"+img2+")");
            setTimeout(next, 1000);
        }
        next();
    }

    $(document).ready(function() {
            carousel_bg(0);     
    });

OP 代码的早期版本中的先前 cmets:

$('#body')

应该是:

$('body')

甚至更快:

$(document.body)

此外,您的 jsFiddle 显示了一些奇怪的问题。你的 CSS 在 HTML 标签上有一个背景图片,但是你的 javascript 在 body 标签上设置了一个半透明的背景图片。这真的是你想要的吗?

【讨论】:

  • ops.. 这是一个错误...我现在要更改.. #body 应该是 #bg_left.. 感谢您的注意。
  • 但这不是问题。我正在尝试更改 div #div_right 和 #div_left 的背景
  • 我今天怎么了... :p 我的意思是。 div #bg_right 和 #bg_left
  • 是的.. HMTL 有背景.. 它与问题无关.. 只是我清理了我从项目中得到的东西,但是是的。我试图改变背景的 div 具有透明度,并且位于 html 之上,每个都有它自己的背景。我会清理它,但显然当你改变问题时人们会生气。
  • @ViniciusSantana - 好的,我想我现在已经为你解决了。看看我在答案的开头添加了什么。我还更改了时间,以便更快地进行调试。
【解决方案2】:

为了测试,我在数组中添加了另一个图像,以便我们在排序中有所区别。

function carousel_bg(id) {
    var bgimgs = [  'http://presotto.daterrawebdev.com/d/img/pp_hey_you_bg.png', 'http://presotto.daterrawebdev.com/d/img/burningman_bg.png', 'http://gallery.orobouros.net/var/albums/2012/NewYorkComicCon2012/Legend-of-Korra/nycc_20121013_164625_0041.jpg?m=1354760251' ]; // add images here..
    var img1 = bgimgs[id+1];
    var img2 = bgimgs[id];
    var cnt = bgimgs.length; // change this number when adding images..

    $('#bg_left').css("background-image", "url("+img1+")");
    $('#bg_right').css("background-image", "url("+img2+")");

    id = id + 1;
    if (id== (cnt - 1) ) id = 0;

    setTimeout("carousel_bg("+id+")", 10000);
}

这里有两个变化:

  1. 对于您的图像总数,我正在动态检索数组中的图像总数,而不是手动检索 (bgimgs.length)
  2. 在重置 id 值的条件中,将总计数减 1。由于 JS 具有从零开始的索引,因此不这样做会导致未定义的错误(3 项数组将在您的最后一次迭代的原始代码)。

虽然这段代码会循环遍历您的数组,但它不是随机的。那是另一个话题。

【讨论】:

  • 使用长度而不是更改数字来完成您添加的第二个修复程序 cnt -1 的工作。感谢那。但是循环仍然没有运行。检查下面的链接。 jsfiddle.net/vinicius5581/B9aQg/8
【解决方案3】:

对于那些不使用 JQuery 的人,只需执行以下操作:

document.body.style.backgroundImage="url(images/mybackgroundimage.jpg)";

【讨论】:

    猜你喜欢
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 2018-06-06
    • 1970-01-01
    • 2010-12-24
    • 2018-02-10
    相关资源
    最近更新 更多