Der Martin: Probleme mit 'document.setTimeout'

Beitrag lesen

Hallo Marcel,

Ich habe versucht ein von 'Selfhtml' gegebenes Script umzuändern, leider nicht mit vollem Erfolg.

seltsame Dinge treibst du da ...

Funktion soll sein, das beim Drücken eines Links der gegebene Text des Dokuments per document.fgColor von #FFFFFF alle Graustufen bis zu #000000 durchläuft.

Man lässt also eine Variable color von 255 runter bis 0 laufen und setzt in jedem Schleifendurchlauf {body}.style.color auf rgb(color, color, color), wobei {body} eine Referenz auf das body-Element darstellt.
Du machst es dir dagegen unnötig kompliziert.

<script type="text/javascript">
var X = new Array
("F","E","D","C","B","A","9","8","7","6","5","4","3","2","1","0");

Interessant - so zählst du rückwärts. Okay, auch 'ne Möglichkeit, aber ziemlich unkonventionell. ;-)

var x1 = 0, x2 = 0;
var i = 0;

Warum sowohl i als Zählvariable, als auch x1 und x2? Eins von beiden würde genügen.

function setColor () {
  document.fgColor =
"#" + X[x1] + X[x2] + X[x1] + X[x2] + X[x1] + X[x2];
  x2 = x2 + 1;

Oder kürzer: x2++

if (x2 % 16 == 0) {
    x2 = 0;
    x1 = x1 + 1;

x1++

}
  i++;
  if (i < 256)
    window.setTimeout("setColor()", 10);
}
</script>

Das klappt soweit ganz gut. Probleme treten erst auf, wenn man das 2. Mal auf den Link drückt. In meinem Firefox Browser steht der Text dann sofort in einem Ekel-Blau, das Script streikt also.

Nein, es macht genau, was du ihm gesagt hast. Wo setzt du deine Variablen (x1, x2, i) auf ihre Anfangswerte zurück?
Aber wir gesagt: Dein Ansatz ist äußerst unbeholfen und unnötig kompliziert.

So long,
 Martin

--
F: Was sagt die kleine Kerze zur großen Kerze?
A: Ich gehe heute nacht aus!