Alexander isses: Grafik nach Zeitablauf automatisch/manuell neuladen

Guten Abend!

Ich schlage mich nun verzweifelt mit JavaScript herum:
Ich habe eine HTML-Seite, in der eine Grafik angezeigt wird. Diese Grafik soll automatisch nach einer bestimmten Zeit (per JavaScript) neugeladen werden. Zudem soll der Benutzer die Möglichkeit haben, per Button die Grafik jederzeit manuell neuladen zu können (danach soll die Zeit wieder von vorne zu laufen beginnen bis zum automatischen Neuladen).
Soweit funktioniert das an sich auch - mein JavaScript sieht vom Prinzip her so aus:

refreshInterval = 60; // Sekunden bis zum autom. Neuladen
function neuladen(wie)
{
  if(wie == 1)
    refreshInterv = 0; // jetzt neuladen
  else
    refreshInterv = refreshInterv - 1; // Zähler verringern für Autom.
  if(refreshInterv == 0)
  {
    document.images["grafik"].src = "grafik.jpg";
    refreshInterv = refreshInterval;
  }
  window.setTimeout("neuladen(2)", 1000);
}

Aufgerufen wird das aus dem HTML-Code per
onload="neuladen(1)"
.
Der Button zum manuellen Neuladen ruft per JavaScript so auf:
neuladen(1)

Das Neuladen funktioniert damit sowohl automatisch als auch mit manuellem Neuladen.
Aber nun das Problem: Wenn man per Button manuell neulädt, läuft die Zeit des automatischen Neuladens danach schneller! Und mit jedem weiteren manuellen Neuladen läuft die Zeit immer schneller ab.

Ich weiß nicht weiter, wie kommt das bloß?
Kann mir jemand helfen?

Ratlos,
Alexander

  1. Hi,

    Aber nun das Problem: Wenn man per Button manuell neulädt, läuft die Zeit des automatischen Neuladens danach schneller! Und mit jedem weiteren manuellen Neuladen läuft die Zeit immer schneller ab.
    Ich weiß nicht weiter, wie kommt das bloß?

    mit jedem(!) Ausführen der Funktion neuladen() wird ihr erneutes Ausführen eine Sekunde später initiiert. Wird neuladen() also drei mal gestartet, passiert dies anschließend drei mal pro Sekunde. Wenn Du das nicht möchtest, solltest Du Dein automatisches Wiederausführen überdenken.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi,

      danke für die Antwort.

      mit jedem(!) Ausführen der Funktion neuladen() wird ihr erneutes Ausführen eine Sekunde später initiiert. Wird neuladen() also drei mal gestartet, passiert dies anschließend drei mal pro Sekunde. Wenn Du das nicht möchtest, solltest Du Dein automatisches Wiederausführen überdenken.

      So ein Ärger.
      Gibt es denn eine Möglichkeit, das zu verhindern? Wenn sich die Funktion nicht wieder aufruft, bleibt der Zähler stehen und die Funktion funktioniert nicht wie gewünscht.

      Alexander

      1. Hi,

        Gibt es denn eine Möglichkeit, das zu verhindern?

        ja, starte den Wiederaufruf nur dann, wenn Du ihn auch haben möchtest.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
      2. Lieber Alexander,

        Gibt es denn eine Möglichkeit, das zu verhindern? Wenn sich die Funktion nicht wieder aufruft, bleibt der Zähler stehen und die Funktion funktioniert nicht wie gewünscht.

        vielleicht hilft Dir das hier? Animieren in JavaScript

        Liebe Grüße,

        Felix Riesterer.

        --
        ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
  2. @@Alexander isses:

    nuqneH

    refreshInterv = refreshInterv - 1; // Zähler verringern für Autom.

    BTW, die Schreibweise refreshInterv -= 1 kennst du? Oder in diesem Fall refreshInterv-- oder --refreshInterv?

    window.setTimeout("neuladen(2)", 1000);

    Wozu zwei Zähler: refreshInterv und den in setTimeout()? Du kannst doch setTimeout() gleich mit der gewünschten Zeit (60000 Millisekunden) aufrufen.

    clearTimeout() kennst du? setInterval()/clearInterval() kennst du?

    Qapla'

    --
    Volumen einer Pizza mit Radius z und Dicke a: pi z z a
  3. Hallo,

    danke für die Hilfe.
    Ich habe es nun hinbekommen.

    Alexander