2010-11-19 20 views
3

Ceci est le code sur lequel j'ai travaillé, qui fait que la couleur de fond scintille. Je me demande si quelqu'un sait comment faire cette répétition afin que l'arrière-plan continue à changer de couleur encore et encore et encore.Comment répéter une fonction avec 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

Vous devez promettre de me passer le bong si je vous aide avec ce. – Pointy

+0

@Pointy: LOL! C'est tellement vrai! –

+3

@yeee Utilisez '[" a "," b "," c "]' au lieu de 'nouveau tableau (" a "," b "," c ")' –

Répondre

5
x = (x + 1) % 32; 

En outre, vous devez supprimer le clearInterval (et associés si), et il n'y a pas besoin d'utiliser une chaîne pour le setInterval:

change_bg = setInterval(bg_eff, 50); 
+0

@yeee pour être clair, voir ce code où il est dit 'if (x == 32) ...'? vous enlevez cela et mettez dans le code que @Mathew Flaschen suggère ici – Pointy

3

code modifié ici (en utilisant jquery)

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

J'utilise un s récursives etTimeout au lieu de l'intervalle, il est plus résiliente de cette façon (si votre fonction prend plus de temps que rien ne se produit étrange intervalle)

+0

Ne serait pas 'x = (x + 1)% 32;' être mieux lisible? – thejh

+1

@thejh Bien sûr, non. 'x ++; si (x == 32) {x = 0; } 'est évidemment plus lisible que' x = (x + 1)% 32; '. C'est deux fois plus long, mais plus lisible. –

0

je ferais ceci:

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

en plus de la réponse de Matthieu, mais étant donné que les tableaux sont dans la même séquence, vous pourriez faire quelque chose comme ça.

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

MERCI !! Je suis sorti un peu et je suis revenu pour voir ça. C'est vraiment super. – yeee11

0

une nouvelle version avec pur Jquery

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

J'utilise .animate pour le code beaucoup plus propre (pas besoin pour les tableaux ou les x ++)

oh et d'avertissement: couleur effrayant échange

$("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

Vous devez déclarer bg_eff. Remplacer '(bg_eff = fonction (x)' par 'var bg_eff = (fonction (x)'. –

+0

bon point, mis à jour.Il doit être global pour fonctionner dans les lamdas, mais il doit au moins être explicite. – generalhenry

Questions connexes