Wie starte ich die setInterval-Schleife sofort? [duplicate]
Lesezeit: 2 Minuten
Googlebot
In einem einfachen setInterval
setInterval(function() {
// Do something every 9 seconds
}, 9000);
Die erste Aktion erfolgt nach 9 Sekunden (t=9s). So zwingen Sie die Schleife, die erste Aktion sofort auszuführen (t=0)?
Ich denke, es liegt am Mechanismus von setInterval haben Delay - Action - Delay - Action ... Schleife; Anstatt von Action - Delay - Action - Delay ... Schleife.
BEARBEITEN: Meine Funktion ist ja eine Schleife als
setInterval(function(){
$('.test').each(function(idx){
var duration = 1000;
$(this).delay(duration*idx);
Some stuff here
});
}, 4000);
Wer Event-JavaScript hasst, hasst den DRY-Principal.
– Lauf_das_Rennen
4. Februar um 13:11 Uhr
Salmann A
Halte es einfach. Sie können eine benannte Funktion anstelle einer anonymen Funktion verwenden; Rufen Sie es auf und legen Sie ein Intervall dafür fest.
function doSomething() {
console.log("tick");
}
doSomething();
setInterval(doSomething, 9000);
Der erste Teil dieser Antwort wird als neu immer langsamer setInterval wird jede Schleife gemacht. Dies könnte durch Austausch behoben werden window.setInterval mit setTimeout.
– Jakob Birkett
7. Januar 2018 um 22:57 Uhr
Ich frage mich, wie das 2. Beispiel mit einer Lambda-Funktion funktionieren würde?
– ESP32
8. Januar 2019 um 21:54 Uhr
Manchmal verwende ich dieses Muster …
(function me() {
// Do something every 9 seconds
setTimeout(me, 9000);
})();
Es ist nicht ganz dasselbe, da es bis zum warten wird etwas tun wird ausgeführt, bevor ~9 Sekunden gewartet wird, um es erneut aufzurufen. Dies ist jedoch oft nützlich, damit sich Ereignisse in der Ereigniswarteschlange nicht unnötig stapeln (es ist jedoch unwahrscheinlich, dass ein Code 9 Sekunden zum Ausführen benötigt 🙂
Beachten Sie, dass in älteren IEs die me wird nach außen durchsickern.
“Beachten Sie, dass in älteren IEs das me in den äußeren Bereich gelangt.” Und zwei verschiedene Funktionen werden zu unterschiedlichen Zeiten mit demselben Code erstellt. Das Erste Wenn Ihr Code ausgeführt wird, ist es einer von ihnen; alle folgenden Male ist es das andere. Seltsam aber wahr.
– TJ Crowder
12. Mai 2012 um 11:54 Uhr
Ich wünschte, dies funktionierte nahtlos in allen Browsern. Es ist einfach so sauber. Welche Versionen von IE funktionieren nicht?
– der König der Wahrheit
13. Dezember 2013 um 23:48 Uhr
@thekingoftruth Es sollte Arbeit nahtlos, es wird einfach auslaufen me Kennung im IE. Aus dem Gedächtnis ist es <= IE8, das ein Problem hat.
– Alex
14. Dezember 2013 um 7:11 Uhr
@alex damit kann ich leben. 🙂 Ich frage mich, ob (var me = function(){... würde auch funktionieren. edit: ah, ich sehe, dass es nicht geht.
– der König der Wahrheit
17. Dezember 2013 um 23:35 Uhr
@thekingoftruth var <name> = <something> ist undefinedwohingegen <name> = <something> ist <name> (was effektiv gleich ist <something>. Sie können also tun var me; (me = function() { … })().
– Iso
21. Februar 2014 um 14:46 Uhr
setInterval() ist eine wirklich hässliche Funktion. Ich verwende diese bereinigte Version, die die Funktion sofort aufruft und vor dem Funktionsparameter eine Zeit in Sekunden benötigt, sodass der Aufruf mit einer Inline-Funktionsdefinition tatsächlich sinnvoll erscheint.
Wenn callback clearInterval() aufruft, wird das Intervall beim ersten Aufruf mit dieser Implementierung immer nicht gelöscht. Was funktionieren würde ist: const id = setInterval(...); setTimeout(callback); return id; Dadurch wird sichergestellt, dass die intervalId im ersten Callback-Aufruf nicht undefiniert ist
– Areeb
10. Mai 2021 um 19:09 Uhr
Verwenden Sie eine benannte Funktion, rufen Sie sie auf und weisen Sie sie dem Intervall zu.
var myFnc = function() {
// Do something every 9 seconds
};
setInterval(myFnc, 9000);
myFnc();
Die andere Möglichkeit besteht darin, stattdessen setTimeout zu verwenden.
var myFnc = function() {
// Do something every 9 seconds
setTimeout(myFnc, 9000);
};
myFnc();
11457900cookie-checkWie starte ich die setInterval-Schleife sofort? [duplicate]yes
Wer Event-JavaScript hasst, hasst den DRY-Principal.
– Lauf_das_Rennen
4. Februar um 13:11 Uhr