2010-11-19 12 views
3

Dies ist der Code, an dem ich gearbeitet habe, die Hintergrundfarbe flackern Farben macht. Ich frage mich, ob jemand weiß, wie man diese Wiederholung macht, so dass der Hintergrund weiterhin die Farben ändert und weiter und weiter geht.Wie wiederhole ich eine Funktion mit 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

Sie müssen versprechen, mir die Bong zu übergeben, wenn ich Ihnen mit helfe Dies. – Pointy

+0

@Pointy: LOL! Das ist wirklich wahr! –

+3

@yeee Verwenden Sie '[" a "," b "," c "]' anstelle von 'neuen Array (" a "," b "," c ")' –

Antwort

5
x = (x + 1) % 32; 

Außerdem sollten Sie die clearInterval (und die damit verbundenen if) entfernen, und es besteht keine Notwendigkeit, eine Zeichenfolge für die setInterval zu verwenden: hier

change_bg = setInterval(bg_eff, 50); 
+0

@yeee, um klar zu sein, sehen Sie diesen Code, wo es sagt, "if (x == 32) ..."? Sie würden das herausnehmen und den Code eingeben, den @Mathew Flaschen hier vorschlägt – Pointy

3

modifizierten Code (mit Jquery)

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

ich benutze eine rekursive s etTimeout anstelle des Intervalls, ist es belastbarer auf diese Weise (wenn Ihre Funktion dauert länger als das Intervall nichts ungerade auftritt)

+0

Wäre nicht 'x = (x + 1)% 32;' besser lesbar? – thejh

+1

@thejh Natürlich nicht. 'x ++; if (x == 32) {x = 0; } 'ist offensichtlich lesbarer als' x = (x + 1)% 32; '. Es ist doppelt so lang, aber besser lesbar. –

0

ich dies tun würde:

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

neben Matthew Antwort, aber da die Arrays In der gleichen Reihenfolge könnten Sie so etwas tun.

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

DANKE !! Ich trat ein wenig aus und kam zurück, um das zu sehen. Es ist wirklich toll. – yeee11

0

eine neue Version mit reinen JQuery

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

I .animate für viele sauberen Code (keine Notwendigkeit für die Arrays oder die x ++)

oh und Warnung verwenden: beängstigend Farbe tauschen

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

Sie sollten bg_eff deklarieren. Ersetzen Sie '(bg_eff = function (x)' durch 'var bg_eff = (function (x)'. –

+0

good point, aktualisiert. Es muss global sein, um in den lamdas zu funktionieren, sollte aber zumindest explizit sein. – generalhenry

Verwandte Themen