NEWS
Frage zu Timern in javascript
-
Hallo Zusammen,
ich habe hier schon im Forum gesucht und ein paar Threads gelesen, dennoch kapiere ich den Einsatz einer Timer-Funktion noch nicht so ganz.
Folgendes Szenario:
Ich habe 4 Taster bzw. Ereignisse (Taster1, Taster2, Taster3, Taster4) und 2 Variablen. Variable1 ist eine Zahl im Bereich 0-100, Variable2 ist eine boolean mit true/false.
folgende Umsetzung:
Wenn ich Taster1 oder 2 drücke und halte, ändert sich im selben Moment der Wert Variable1
Nachdem Taster1 oder 2 losgelassen wurde und der Wert von Variable1 nicht genau 0 oder genau 100 ist, sondern ein Wert dazwischen liegt, dann soll Variable2 auf "true" gesetzt werden, andernfalls auf "false".
Wenn aber jetzt Taster3 betätigt wird, soll für einen Zeitraum x, z.B. 24h, der Wert von Variable2 auf true bleiben, unabhängig, ob ich Taster1 oder 2 betätige. Dabei soll sich aber weiterhin der Wert für Variable1 ändern.
Immer wenn ich Taster3 betätige, fängt der Zeitraum wieder von vorne an zu laufen.
Wenn ich Taster4 betätige, wird der Zeitraum gestoppt und Variable2 wird auf false gesetzt.
von der Idee her:
const idTaster1='...'; const idTaster2='...'; const idTaster3='...'; const idTaster4='...'; const idVariable1='....': var variable1 = getState(idVariable1).val; var variable2 = false; function ausloesen(){ if(variable1=0 || variable1=100) variable2= false else variable2 =true; wenn Taster3, dann TIMER???? wenn Taster4, dann TIMER canceln? } on(idVariable1, function(obj) { variable1 = obj.state.val; ausloesen(); }); on(idTaster3, function(obj) { ausloesen(); //aber mit Timer setzen }); on(idTaster4, function(obj) { ausloesen(); //aber mit Timer abbrechen });
Habt ihr das Problem verstanden?
Wie setz ich das um?
Ich verstehe momentan noch nicht, wie ein Timer umgesetzt werden kann.
danke
Marcus
-
Wenn aber jetzt Taster3 betätigt wird, soll für einen Zeitraum x, z.B. 24h, der Wert von Variable2 auf true bleiben, `
Nur auf true bleiben, wenn bereits auf true, oder auf true gesetzt werden ?
@mguenther:Dabei soll sich aber weiterhin der Wert für Variable1 ändern. `
Wodurch wird der Datenpunkt idVariable1 verändert ?
@mguenther:Immer wenn ich Taster3 betätige, fängt der Zeitraum wieder von vorne an zu laufen. `
Das löst man etwa so:var timer = null; on(idTaster3, function() { if(timer) clearTimeout(timer); timer = setTimeout(function() { timer = null; ausloesen(); // Aufruf nach Ablauf der Verzögerungszeit }, 60 * 60000); // 60 Minuten });
timer mus eine globale Variable sein. Die Variable timer kann innerhalb der Funktion ausloesen() ausgewertet werden.
@mguenther:Wenn ich Taster4 betätige, wird der Zeitraum gestoppt und Variable2 wird auf false gesetzt. `
on(idTaster4, function() { if(timer) clearTimeout(timer); // Stopp Timer timer = null; variable2 = false; ausloesen(); });
-
Wenn aber jetzt Taster3 betätigt wird, soll für einen Zeitraum x, z.B. 24h, der Wert von Variable2 auf true bleiben,
Nur auf __true__ bleiben, wenn bereits auf __true__, oder auf __true__ gesetzt werden ?
hmmmm… wenn er auf true steht, dann soll der timer wieder für den zeitraum starten. Ich brauche da keinen neuen Trigger als Auslöser, wenn du das meinst.Dabei soll sich aber weiterhin der Wert für Variable1 ändern.
Wodurch wird der Datenpunkt __idVariable1__ verändert ?
immer nur durch Taster1 und Taster2Rest probiere ich aus….
-
Ich brauche da keinen neuen Trigger als Auslöser, wenn du das meinst. `
Nein, das meine ich nicht, sondern: Soll variable2 durch Taster3 auf true gesetzt werden oder auf false bleiben, falls sie zu dem Zeitpunkt auf false steht ?
@mguenther:immer nur durch Taster1 und Taster2 `
Das ist bisher aus dem Programm nicht ersichtlich, da (noch) kein setState() vorhanden. Sollte dann die Funktion ausloesen() nicht ausschließlich durch Taster1 und Taster2 aufgerufen werden ? -
Ich brauche da keinen neuen Trigger als Auslöser, wenn du das meinst.
Nein, das meine ich nicht, sondern: Soll __variable2__ durch Taster3 auf __true__ gesetzt werden oder auf __false__ bleiben, falls sie zu dem Zeitpunkt auf __false__ steht ?
ah, nein, sobald Taster3 betätigt wird, soll Variable2 auf true gesetzt werden.
@paul53:immer nur durch Taster1 und Taster2
Das ist bisher aus dem Programm nicht ersichtlich, da (noch) kein __setState()__ vorhanden. Sollte dann die Funktion __ausloesen()__ nicht ausschließlich durch Taster1 und Taster2 aufgerufen werden ?
mir ging es eher darum, dass die Variable2 auf true/false für den Zeitraum bzw. für den Wertebereich gesetzt wird. Dass durch Betätigung von Taster1 und 2 der Wert für Variable1 geändert wird, habe ich mit einer Direktverbindung gelöst. Das geht somit davon unabhängig. -
sobald Taster3 betätigt wird, soll Variable2 auf true gesetzt werden. `
Also hat variable2 lediglich eine Sperrfunktion. Dann besser so:on(idTaster3, function() { variable2 = true; if(timer) clearTimeout(timer); timer = setTimeout(function() { timer = null; variable2 = false; }, 60 * 60000); // 60 Minuten }); on(idTaster4, function() { variable2 = false; if(timer) clearTimeout(timer); // Stopp Timer timer = null; });
-
danke - hat funktioniert.