94451
Goto Top

Pause-Start im "undefinierten" Timeout und Intervall

Hallo,

ich habe eine kleine Bildershow in der ich mit mehreren timeouts in einem intervall arbeite...

das sieht in etwa so aus:

function LoadImage(id, rmTime) {

	--- BILDER SPEKTAKULÄR ANZEIGEN ---

	setTimeout(function(){ 
		$( "#can_"+id ).fadeOut( effectTime );   
		setTimeout(function(){ 
			$( "#can_"+id ).remove();  
			$( "#img_"+id ).remove();  
		}, effectTime + preloadTime );										
	}, rmTime - effectTime );
}

setTimeout(function(){ 
	LoadImage(zufallsID, (showTime+showTime-preloadTime));
	interval = setInterval(function(){ 
		LoadImage(andereZufallsID, (showTime+showTime-preloadTime));
	}, showTime);
}, preloadTime );

die Besonderheit ist, dass ich die Bilder vorlade (keine Angst, das läuft im lokalem Netzwerk, deshalb müssen die unkomprimierte Bilder vorgeladen werden).

jetzt ist es ja so, dass ich in der Theorie "immer" 2 Bilder geladen habe. Wie stell ich das jetzt am geschicktesten an dass ich das ganze "Pausieren" kann.
=> also Pause wäre der optimal Fall, ein Stop (der die Timer zurücksetzt und nach start neu anlaufen lässt) wäre aber auch gut...

ich habe bereits versucht ein Array aufzubauen und einfach mit "Push" alle setTimeouts reinzuschieben... damit könnte ich zwar alles anhalten, aber ein Starten ist dann nicht mehr möglich...
Ich schaff es hier einfach nicht die abgelaufene Zeit oder eine ID mit abzuspeichern

delays werden gespeichert, aber können nicht unterschieden werden.
var delays = ;
delays.push(setTimeout...);

delays werden nicht gespeichert
var delays = ;
delays[id] = setTimeout...;


ebenso stehe ich dann noch vor der Problematik, dass der Delay auch wieder aus dem Array gelöscht werden müsste, ansonsten würde ich ein ziemlich großes Array erzeugen (wenn das Script mal einige Stunden läuft)...

ich bin für jeden Tipp dankbar. Evtl. ist es ja einfacher als ich es mir vorstelle...

Content-Key: 297476

Url: https://administrator.de/contentid/297476

Ausgedruckt am: 28.03.2024 um 19:03 Uhr

Mitglied: 114757
114757 26.02.2016 aktualisiert um 14:46:10 Uhr
Goto Top
Moin,
Du bekommst von setInterval eine Variable zurück, diese kannst du benutzen um den Interval zu stoppen. Definiere die Variable global dann kannst du sie aus einer anderen Function auch zum Stoppen benutzen.
http://www.w3schools.com/jsref/met_win_clearinterval.asp

Btw. Ist der Timeout zum Entfernen der Bilder überflüssig, dafür gibt es von jQuery den zweiten Parameter von fadeout (complete) welcher automatisch am Ende der Animation eine function ausführen kann face-smile
http://api.jquery.com/fadeout/

Gruß jodel32
Mitglied: 94451
94451 26.02.2016 aktualisiert um 14:54:18 Uhr
Goto Top
Zitat von @114757:
Du bekommst von setInterval eine Variable zurück, diese kannst du benutzen um den Interval zu stoppen. Definiere die Variable global dann kannst du sie aus einer anderen Function auch zum Stoppen benutzen.

Das beantwortet meine Frage GARNICHT...
es geht hier VORALLEM um die unklaren timeouts und nicht um den einen Intervall...

auch weiß ich natürlich wie man ein timeout stoppt... aber ich weiß nicht wie ich weiß WELCHE timeouts gerade laufen (das können bis zu 4 stück sein).
=> wie man aus DIESEN Zeilen herauslesen kann:
setTimeout(function(){ 
	LoadImage(zufallsID, (showTime+showTime-preloadTime));
	interval = setInterval(function(){ 
		LoadImage(andereZufallsID, (showTime+showTime-preloadTime));
	}, showTime);
}, preloadTime );


werden immer 2 Bilder leicht versetzt geladen... damit wenn das nächste bild dran ist, dieses bereits geladen ist...

der Remove vom eigentlichen bild ist notwendig... den remove vom canvas könnte ich mir theoretisch wie du schreibst zwar sparen, mir gefällt das aber dies im Code sehen zu können das es entfernt wird... <- aber danke
Mitglied: 114757
114757 26.02.2016 aktualisiert um 15:11:30 Uhr
Goto Top
Das beantwortet meine Frage GARNICHT... es geht hier VORALLEM um die unklaren timeouts und nicht um den einen Intervall...
Schreien brauchst du hier nicht .... Du willst ja Hilfe, nicht wir. Und wenn man schon schreit dann bitte auch lexikalisch korrekt .

Und doch, das clearen des jeweiligen Intervals stoppt alles folgende. Über die Intervall-Variablen brauchst du nur Buch führen. Dann kannst du die jeweiligen wie gewünscht stoppen. Ansonsten ist der Aufbau nicht sonderlich konsistent.

Und ich sagte das du dir den überflüssigen Timeout zum Entfernen sparen kannst wenn du die extra von jQuery bereitgestellte Funktion benutzt die es dafür gibt.
Mitglied: 94451
94451 26.02.2016 um 16:03:31 Uhr
Goto Top
Zitat von @114757:

Das beantwortet meine Frage GARNICHT... es geht hier VORALLEM um die unklaren timeouts und nicht um den einen Intervall...
Schreien brauchst du hier nicht .... Du willst ja Hilfe, nicht wir. Und wenn man schon schreit dann bitte auch lexikalisch korrekt .

Und doch, das clearen des jeweiligen Intervals stoppt alles folgende. Über die Intervall-Variablen brauchst du nur Buch führen. Dann kannst du die jeweiligen wie gewünscht stoppen. Ansonsten ist der Aufbau nicht sonderlich konsistent.

Und ich sagte das du dir den überflüssigen Timeout zum Entfernen sparen kannst wenn du die extra von jQuery bereitgestellte Funktion benutzt die es dafür gibt.

sorry... war nicht so gemeint ... *flüster*

jetzt versteh ichs... <- also das mit dem timeout und dem fade... das könnte ich so umsetzen!

das mit dem "clearen" den Interalls versteh ich nicht.

wenn ich mit meinem Intervall eine funktion aufrufe in der ein timeout ist... dann läuft das timeout doch zuende!? Auch wenn (in meinem Fall) keine bilder mehr nachgeladen werden!?
Oder versteh ich da was "ganz falsch"?