首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用jQuery变换人体背景图像

用jQuery变换人体背景图像
EN

Stack Overflow用户
提问于 2013-09-10 15:32:44
回答 4查看 35.8K关注 0票数 3

我决定每10秒做一次改变身体背景图像的功能。

代码语言:javascript
复制
function Background()
{
    var Background_Stage;
    switch(Background_Stage)
    {
        case 0:
        {
            $('body').css.('background', '#000 url(../../Styles/Callum_Project1/Images/BACKGROUND_1_TEST.png) no-repeat');
            Background_Stage++;
            setInterval(function(){Background()},10000);
        }
        case 1:
        {
            $('body').css.('background', '#000 url(../../Styles/Callum_Project1/Images/BACKGROUND_2_TEST.png) no-repeat');
            Background_Stage++;
            setInterval(function(){Background()},10000);
        }
        case 2:
        {
            $('body').css.('background', '#000 url(../../Styles/Callum_Project1/Images/BACKGROUND_2_TEST.png) no-repeat');
            Background_Stage = 0;//Reset 
            setInterval(function(){Background()},10000);
        }
    }
}

但是当我做这种事的时候

代码语言:javascript
复制
<body onload="Background()"></body>

它似乎没有做任何事情,这可能是一个愚蠢的事情寻求帮助,但这是我第一次在学习JavaScript时,我应该说,我使用了jQuery的大部分。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-09-10 15:45:51

您的代码有几个问题:

  • Background_Stage的值不会在对后台的调用之间持久化,而且在任何情况下,您都不会将一个值分配给Background_Stage。
  • 使用setTimeout而不是setInterval。setTimeout将在分配的时间结束时调用该函数一次。setInterval将一次又一次地调用同一个函数,直到显式取消为止。按照您的方式,您将得到许多并发的setIntervals运行。
  • 你不需要“。”在css和下面的括号之间。

最后,尽量不要重复自己,这意味着,如果您发现自己一遍又一遍地输入相同的语句,那么您可能会使代码变得更简洁。类似于:

代码语言:javascript
复制
(function() 
{
    var bgCounter = 0,
        backgrounds = [
           "../../Styles/Callum_Project1/Images/BACKGROUND_1_TEST.png",
           "../../Styles/Callum_Project1/Images/BACKGROUND_2_TEST.png",
           "../../Styles/Callum_Project1/Images/BACKGROUND_3_TEST.png"
        ];
    function changeBackground()
    {
        bgCounter = (bgCounter+1) % backgrounds.length;
        $('body').css('background', '#000 url('+backgrounds[bgCounter]+') no-repeat');
        setTimeout(changeBackground, 10000);

    }
    changeBackground();
})();

现在,更改背景URL或添加更多是编辑背景数组的简单工作。

票数 4
EN

Stack Overflow用户

发布于 2013-09-10 15:58:52

您也可以尝试这样做:

代码语言:javascript
复制
function Background(){
    var imgs = [
            "../../Styles/Callum_Project1/Images/BACKGROUND_1_TEST.png",
            "../../Styles/Callum_Project1/Images/BACKGROUND_2_TEST.png",
            "../../Styles/Callum_Project1/Images/BACKGROUND_3_TEST.png"
        ],
        len = imgs.length,
        idx = -1;

    setInterval(function(){
        idx = (idx+1)%len;
        $("body").css("background", "#000 url("+imgs[idx]+")");
    }, 10000);
}
票数 2
EN

Stack Overflow用户

发布于 2013-09-10 15:34:36

每次调用后台时,都实例化一个名为Background_Stage的新局部变量,其值为undefined。这与任何switch选项都不匹配。

您需要在函数之外声明变量(因此它在函数调用之间持续存在),并给它一个起始值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18723103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档