JavaScript function pausieren
Hallo nochmal,
langsam zweifle ich an meinem Verstand! Ein Fan von JavaScript werde ich in diesem Leben wohl wirklich nicht mehr...
Folgender Code:
function punktung() {
var punkte = document.getElementById("punkte");
if ( punkte.innerHTML.length > 3 ) {
punkte.innerHTML = "";
clearinterval(dots);
setTimeout(function (){losgehts()}, 5000);
}
else {
punkte.innerHTML += ".";
}
}
function losgehts() {
var dots = window.setInterval( function() { punktung() },500);
}
losgehts();
Das Script schreibt immer vier Punkte in ein Div und soll, nachdem die vier Punkte geschrieben wurden und die ID "Punkte" auf "" gekürzt wird, 5 Sekunden pausiert wird - danach das Gleiche wieder von vorne.
Ich lösche also den Interval "dots" und pausiere 5000 Millisekunden und rufe danach wieder die function "losgehts()" auf - warum funktioniert es aber wieder nicht? Es wird einfach keine Pause gemacht, sondern nach dem Kürzen einfach wieder von Vorne begonnen. Warum?
Über Antworten bin ich dankbar!
Grüße, Hummel
3 Antworten
var legt eine neue Variable fest, deren Gültigkeitsbereich den kompletten Funktionsblock umfasst. Wird sie außerhalb einer Funktion definiert, ist die Variable global gültig.
In deinem Beispiel wird var dots allerdings in einer Funktion definiert. Das heißt, dots ist nur innerhalb von losgehts() gültig.
Übrigens musst du nicht jedes mal eine anonyme Funktion erstellen, wenn du setInterval oder setTimeout aufrufst. Du kannst die Funktionen direkt übergeben.
var dots;
function punktung() {
var punkte = document.getElementById("punkte");
if ( punkte.innerHTML.length > 3 ) {
punkte.innerHTML = "";
window.clearInterval(dots);
setTimeout(losgehts, 5000);
}
else {
punkte.innerHTML += ".";
}
}
function losgehts() {
dots = window.setInterval(punktung,500);
}
losgehts();
clearInterval, nicht clearinterval
Mal von dem Fehler abgesehen ist die Funktion echt cool. Ich würde Dich unabhängig von Deiner Frage gerne frage, ob Du etwas dagegen hast, wenn ich den Code ohne Quellenangabe auf meiner Webseite verwende?
Hallo userfromberlin,
leider funktioniert das Script trotzdem nicht mit der Pause... Hier mal in action: https://jsfiddle.net/Lv8ueocf/
-> Es soll nach dem Kürzen auf null des Strings eine 5 Sekunden - Pause gemacht werden, das Script schreibt aber direkt weiter, warum?
Gerne kannst du das Script bei dir nutzen, hier ist es jetzt ohnehin publiziert ;-)
Grüße,
Hummel
Der nächste Fehler: Du hast die Variable "dots" lokal gestaltet, die muss aber global sein (ohne var vor).
Vielen Dank für die Erlaubnis, den Code zu benutzen! Ich freue mich schon sehr für meine Seite (-;.
Ein kleiner Fehler - schreibe anstatt clearinterval doch bitte clearInterval
Hallo yerooke,
selbst mit dieser Verbesserung funktioniert das Script nicht, wie es soll. Die Pause wird nicht gemacht - warum?
Hier mal in action: https://jsfiddle.net/Lv8ueocf/
-> Nachdem alle Punkte auf null gekürzt wurden, soll 5 Sekunden TimeOut sein, es wird stattdessen aber direkt weiter gemacht.
Hast du eine Idee warum?
Grüße,
Hummel
Wie mein Vorredner sagte, du versuchst in einer Funktion die Variable der anderen Funktion anzusprechen, das geht nicht da die Variablen in einer Funktion nur für diese gelten.
Umgehen kannst Du das wenn Du die Variable Global definierst - sprich in JavaScript definiert man die Variablen Global ohne das var vorneweg.
Hier dein Beispiel:
Hallo rmnstr,
vielen Dank für deine Antwort, jetzt habe ich es verstanden!
Die Auszeichnung als "hilfreichste Antwort" folgt natürlich noch.
Grüße, Hummel