2010-11-19 3 views
3

これは私が作業しているコードで、背景色がちらつく色になります。バックグラウンドが色を変え続けるように、誰かがこの繰り返しを繰り返す方法を知っているかどうかは疑問だ。Javascriptで関数を繰り返す方法

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); 
+10

私があなたに手伝ってくれたら、私にボンを渡すことを約束しなければならない この。 – Pointy

+0

@Pointy:LOL!それは本当です! –

+3

@yeee新しい配列( "a"、 "b"、 "c")の代わりに '[" a "、" b "、" c "]'を使用します。 –

答えて

5
x = (x + 1) % 32; 

また、あなたはclearIntervalを削除(および場合関連する)、およびsetIntervalのための文字列を使用する必要はありませんする必要があります

(jqueryのを使用して)ここにコードを変更し
change_bg = setInterval(bg_eff, 50); 
+0

@yeeeは明らかです。 'if(x == 32)...'と書かれているコードを見てください。あなたはそれを取り出し、@Mathew Flaschenがここに示したコードを入れます。 – Pointy

3

私が使用

http://jsfiddle.net/generalhenry/S8g6k/1/

再帰秒私はこれを行うだろう

+0

'x =(x + 1)%32;'は読みやすくなりますか? – thejh

+1

@thejhもちろん、そうではありません。 'x ++; if(x == 32){x = 0; } 'は明らかに' x =(x + 1)%32; 'よりも読みやすくなります。それは2倍の長さですが、より読みやすいです。 –

0

(あなたの関数が区間奇数何も発生したより時間がかかった場合)etTimeout代わり間隔のために、それはその方法より弾力性です:

x += 1; 
if (x === 32) { x = 0; } 
マシューの答えに加えて
0

が、配列があるので、同じ順序で、あなたはこのようなことをすることができます。

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! 
} 
+0

ありがとうございます!私は少し歩いてこれを見に戻った。それは本当に素晴らしいです。 – yeee11

0

純粋なjQueryの

http://jsfiddle.net/generalhenry/S8g6k/5/

私はずっとクリーンなコード

ああ、警告(配列またはX ++は必要ありません)のため.animateを使用して新しいバージョン:怖い色スワップ

$("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); 
+1

bg_effを宣言する必要があります。 'bg_eff = function(x)'を 'var bg_eff =(function(x)'に置き換えてください。 –

+0

lamdasで機能するにはグローバルである必要がありますが、少なくとも明示的でなければなりません。 – generalhenry

関連する問題