如何使用Javascript重复函数

如何使用Javascript重复函数,javascript,function,background,repeat,Javascript,Function,Background,Repeat,这是我一直在编写的代码,它使背景颜色闪烁。我想知道是否有人知道如何重复这个过程,这样背景就会不断地改变颜色 var a = new Array("ff", "ee", "dd", "cc", "bb", "aa", "99", "88", "77", "66", "55", "44", "33", "22", "11", "00", "00", "11", "22", "33", "44", "55", "66", "77"

这是我一直在编写的代码,它使背景颜色闪烁。我想知道是否有人知道如何重复这个过程,这样背景就会不断地改变颜色

var a = new Array("ff", "ee", "dd", "cc", "bb", "aa", "99", "88", "77",
                  "66", "55", "44", "33", "22", "11", "00", "00", "11",
                  "22", "33", "44", "55", "66", "77", "88", "99", "AA",
                  "BB", "CC", "DD", "EE", "ff");

x = 0;

var b = new Array("ff", "ee", "dd", "cc", "bb", "aa", "99", "88", "77",
                  "66", "55", "44", "33", "22", "11", "00", "00", "11",
                  "22", "33", "44", "55", "66", "77", "88", "99", "AA",
                  "BB", "CC", "DD", "EE", "ff");

x = 0;

var c = new Array("00", "11", "22", "33", "44", "55", "66", "77", "88",
                  "99", "AA", "BB", "CC", "DD", "EE", "ff", "ff", "ee",
                  "dd", "cc", "bb", "aa", "99", "88", "77", "66", "55",
                  "44", "33", "22", "11", "00");

x = 0;

function bg_eff() {
  col_val = "#" + a[x] + b[x] + c[x];
  document.bgColor = col_val;
  x++;
  if (x == 32) {
    clearInterval(change_bg);
  }
}
change_bg = setInterval("bg_eff()", 50);
此外,您应该删除
clearInterval
(以及相关的if),并且不需要为
setInterval
使用字符串:

change_bg = setInterval(bg_eff, 50);
此处修改的代码(使用jquery)

我使用递归setTimeout而不是interval,这样更有弹性(如果您的函数花费的时间长于interval,则不会出现异常)

我会这样做:

x += 1;
if ( x === 32 ) { x = 0; }

除了Matthew的答案,但是由于数组在相同的序列中,您可以这样做

var a = new Array("ff", "ee", "dd", "cc", "bb", "aa", "99", "88", "77", "66", "55", "44", "33", "22", "11", "00", "00", "11", "22", "33", "44", "55","66", "77", "88", "99", "AA", "BB", "CC", "DD", "EE", "ff");  // one array
var x = 0;  // var for not global (even though in this context it still is...)
function big_eff() {
    col_val = "#" + a[x] + a[(x + 5) % 32] + a[(x + 10) % 32]; // or whatever spacing you want
    document.bgColor = col_val;
    x = (x + 1) % 32;
    setTimeout("big_eff()",50);  // setTimeout baby!
}

使用纯Jquery的新版本

我使用.animate来获得更清晰的代码(不需要数组或x++)

哦,还有警告:可怕的颜色变换

$("body").css("background-color","#ffff00");
var bg_eff;
(bg_eff = function(x)
{
   var duration = 1600;
   if(x)
   {
       $("body").animate({backgroundColor:"#0000ff"},duration,function(){
           bg_eff(false);
       });
   }
   else
   {
       $("body").animate({backgroundColor:"#ffff00"},duration,function(){
           bg_eff(true);
       });
   }
})(true);

如果我帮你的话,你必须答应我把烟递给我。@Pointy:LOL!那是真的@yeee使用
[“a”,“b”,“c”]
而不是
新数组(“a”,“b”,“c”)
@Gert G哇,这让我觉得很有趣it@yeee还有
setInterval(bg_eff,50)
而不是
setInterval(“bg_eff()”,50)
@yeee要清楚,请查看代码中的
if(x==32).
?你可以把它去掉,然后输入@Mathew Flaschen建议的代码here@thejh当然不是<代码>x++;如果(x==32){x=0;}显然比
x=(x+1)%32更可读。它的长度是原来的两倍,但可读性更强。您应该声明bg\u eff。将
(bg_eff=function(x)
替换为
var bg_eff=(function(x)
。很好,已经更新。它确实需要全局才能在lamdas中运行,但至少应该是显式的。谢谢!!我走出去看了一会儿,回来看了看。真的很棒。
$("body").css("background-color","#ffff00");
var bg_eff;
(bg_eff = function(x)
{
   var duration = 1600;
   if(x)
   {
       $("body").animate({backgroundColor:"#0000ff"},duration,function(){
           bg_eff(false);
       });
   }
   else
   {
       $("body").animate({backgroundColor:"#ffff00"},duration,function(){
           bg_eff(true);
       });
   }
})(true);