Timer speichern bei Neuladen

  • Hallo zusammen :)


    Ich komme bei meinem "kleinen" Projekt nicht mehr weiter. Habe leider auch nicht so die Kenntnisse in Javascript.


    Aktuell stehe ich vor folgendem Probelm:


    Auf meiner Website werden Timer aktiviert per Checkbox, welche dann eine Zeit x herunter laufen. Allerdings soll bei dem laden der Seite der aktuelle Timer nicht abgebrochen werden, sondern weiterlaufen und erst resettet werden wenn ich die Checkbox deaktiviere.


    Folgenden Code besitze ich:

    Javascript:


    Ich gebe auch zu das dieser Code nicht von mir ist sondern von einer Website und ich habe ihn ein bisschen modifiziert für meine Anwenung.


    HTML:


    Code
    <div class="toggle text">
                        <label style="left: -1.5em;"> Unter
                        <input type="checkbox" id="unter" value="180" onclick="TimerUnter()"> <span class="slider"></span> </label>
                    </div>
                    <br>
                    <div id="countdown">
                    <div id="tiles" class="color-full"></div>
                    </div>



    Villt kann mir hier jmd weiterhlefen :/

  • Danke das kann ich mir ja mal anschauen ^^ allerdings weiß ich nicht direkt wie ich es umschreibe, sodass die "zeit" die gespeichert ist aufgerufen wird und nicht nue gezählt wird ^^

  • Ich habe es mal grob ergaenzt, aber ohne es zu testen:

  • Vielen vielen Dank für die Mühe :)


    Leider funktioniert es nicht :/ Kann es sein das ich villt i.wo noch was einstellen muss oder eine andere jQuery benutzen muss? Habe aktuell diese:


    Code
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>


    Und das ganze läuft auf einem Raspberry Pi 3B+, falls das ausschlaggebend ist ^^

  • Ja, das war ja nicht getestet und es waren noch Fehler drin, vor allem, dass die Funktion TimerUnter() beim Laden der Seite gar nicht aufgerufen wurde.

    Dies ist jetzt getestet und funktioniert soweit, dass der Timer-Wert gespeichert und beim Neuladen wieder eingelesen wird:

  • Yeah Vielen Dank :D


    Es funktioniert :)


    ich habe allerdings noch eine kleine Frage:


    Wenn ich jetzt bei der "Checkbox" den Haken rausnehme bzw ich habs ja über nen slider, den auf Off stelle das dann der Timer abbricht und ich ihn erst wieder starten kann wenn ich den slider auf ON stelle.

    Also praktisch eine Reset-funktion ^^


    Wie kann man das am besten realisieren?

  • Um den Timer mit clearInterval() wieder löschen zu können, muss man ihn in einer Variablen speichern:

  • Die Änderungen:

    In Zeile 3 die Timervariable definieren.

    In Zeile 42 den Timer in der Variablen speichern.

    In Zeile 75 den Timer löschen. Dies musst Du wahrscheinlich noch ergänzen durch das Löschen der Ausgabe in div#countdown.

  • Wie vorhin, war nicht getestet. Ich habe noch einige Anweisungen hinzu gefügt und hoffe, dass es jetzt unter allen Bedingungen läuft:

  • Okay super danke es funktioniert jetzt :) Aber nur wenn ich den slider auf Off stelle und dann neulade, dann ist der Timer zurückgesetzt.


    Naja ich kann ja noch nen Timer mit setInterval(function (){}); drumrum setzen das alle sekunde die seite nue geladen wird


    oder gibts ne elegantere Lösung?



    EDIT:


    Hab vergessen den Codeabschnitt einzufügen:


    Code
    thetiles.innerHTML = '';


    Damit löscht er zwar beim slide auf OFF den Timer aber nur für 1 Sekunde, dann ist er wieder da

  • Zitat

    Damit löscht er zwar beim slide auf OFF den Timer aber nur für 1 Sekunde, dann ist er wieder da

    Das lässt vermuten, dass der Timer nicht wirklich angehalten wird. Du schreibst da von einem "slide" - ich habe in meiner Testdatei ja einen Checkbutton verwendet. Möglicher Weise hast Du da etwas nicht angepasst?

  • Ah habs problem gefunden... ich hab die


    var timer in die funktion mit rein weil ich das ganze 5 mal habe, also 5 Timer.. werde jetzt einfach 5 timer Variablen machen und die einfach oben deklarieren



    Edit:


    so gehts jetzt :)


    Vielen vielen Dank für die ganze Hilfe :)

  • Zitat

    var timer in die funktion mit rein weil ich das ganze 5 mal habe, also 5 Timer

    Eigentlich wäre das die beste Methode, man hat dann nur das Problem, dass sie bei einem erneuten Aufruf nicht mehr greifbar ist. Man müsste das Ganze dann objektorientiert anlegen, d. h. diese Variable im Objekt definieren, das nur einmal erzeugt wird. Und dann die Funktionen darin, die nötig sind.


    Zitat

    werde jetzt einfach 5 timer Variablen machen und die einfach oben deklarieren

    Das ist sicher möglich, aber wahrscheinlich wirst Du dann auch Teile des Javascript vervielfachen müssen. IMO nicht so günstig und ich würde den objektorientierten Ansatz vorziehen.

  • Also wenn ich den Eingangspost richtig gelesen habe, gibt es ein Eingabefeld, in dem man eine Zahl ( Sekunden? ) eingibt, die als Timer-Laufzeit interpretiert wird. Bei Klick auf eine Checkbox soll der Timer dann die Anzahl der Sekunden runterlaufen.


    Ich würde dafür ebenfalls das localStorage nutzen, allerdings würde ich den Zeitstempel, bis wann der Timer laufen soll und den Zeitstempel, wo der Timer ich gerade befindet darin speichern. Die Differenz beider Zeitstempel ist der Timer-Wert.


    Das hat den Vorteil, dass der Timer auch dann relativ genau ist, wenn der Reload der Seite ggf. mal 2 bis 3 Sekunden dauert.

    Nach dem Reload dann als erstes den Timerstand mit dem aktuellem Datums-Zeitstempel überschreiben und sofern erforderlich den Timer weiterlaufen lassen.


    Zeitstempel geht ganz einfach mit Date.now(), wbei es sich da um Milisekunden handelt. Date.now() + 2000 sind also + 2 Sekunden.

    D.h., wenn ich meinen Timer auf 30 Sekunden setze, setze ich mir als Ziel-Zeitstempel Date.now() + 30000. Solange der aktuelle Zeitstempel < diesem Wert ist, läuft der Timer.


    So zumindest, wenn ich den Eingangspost richtig verstanden habe.

    Ich habe mir nicht jedes Detail der Code-Wülste hier angesehen, aber das ginge deutlich reduzierter, wenn wir von derselben Sache reden.

  • Eigentlich wäre das die beste Methode, man hat dann nur das Problem, dass sie bei einem erneuten Aufruf nicht mehr greifbar ist. Man müsste das Ganze dann objektorientiert anlegen, d. h. diese Variable im Objekt definieren, das nur einmal erzeugt wird. Und dann die Funktionen darin, die nötig sind.


    Das ist sicher möglich, aber wahrscheinlich wirst Du dann auch Teile des Javascript vervielfachen müssen. IMO nicht so günstig und ich würde den objektorientierten Ansatz vorziehen.

    Ja ich habe das ganze jetzt 5x hintereinander :D Aber mehr kommt auch nicht wirklich auf die Seite ^^



    Das hat den Vorteil, dass der Timer auch dann relativ genau ist, wenn der Reload der Seite ggf. mal 2 bis 3 Sekunden dauert.

    Das ist kein Problem denn die Timer gehen mind. 1,5h da kommt es auf die sekunde nicht ganz genau an ^^

    Also wenn ich den Eingangspost richtig gelesen habe, gibt es ein Eingabefeld, in dem man eine Zahl ( Sekunden? ) eingibt, die als Timer-Laufzeit interpretiert wird. Bei Klick auf eine Checkbox soll der Timer dann die Anzahl der Sekunden runterlaufen.

    Nein die Zeit ist fest vorgegeben in dem Feld:


    Code
    <input type="checkbox" id="unter" value="180" onclick="TimerUnter()"> <span class="slider"></span> </label>


    value = 180 minuten ^^

  • Das ist kein Problem denn die Timer gehen mind. 1,5h da kommt es auf die sekunde nicht ganz genau an

    Wenn Du die Seite innerhalb der 180 Minuten ( was übrigens 3 Stunden sind und nicht 1,5 ) ca. 30x neu lädst, ist das bei einer durchschnittl. Ladezeit von 2 Sek. schon eine Minute Verzögerung. Es muss ja nicht 100%ig sein, aber wenn Dir das schon egal ist, kann man einen Timer auch ganz in Frage stellen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!