Ich habe dies ein Stück js auf meiner Website, um Bilder zu wechseln, brauche aber eine Verzögerung, wenn Sie ein zweites Mal auf das Bild klicken. Die Verzögerung sollte 1000 ms betragen. Sie würden also auf die Datei img.jpg klicken, dann würde die Datei img_onclick.jpg angezeigt. Sie würden dann auf das Bild img_onclick.jpg klicken. Es sollte dann eine Verzögerung von 1000 ms geben, bevor das Bild img.jpg erneut angezeigt wird.
Hier ist der Code:
jQuery(document).ready(function($) {
$(".toggle-container").hide();
$(".trigger").toggle(function () {
$(this).addClass("active");
$(".trigger").find('img').prop('src', 'http://localhost:8888/images/img_onclick.jpg');
}, function () {
$(this).removeClass("active");
$(".trigger").find('img').prop('src', 'http://localhost:8888/images/img.jpg');
});
$(".trigger").click(function () {
$(this).next(".toggle-container").slideToggle();
});
});
javascript
jquery
Blau Orange
quelle
quelle
setTimeout(function(){/*YourCode*/},1000);
.stop()
. Schauen Sie hier api.jquery.com/stopAntworten:
Verwendung
setTimeout()
:Wenn Sie darauf verzichten möchten
setTimeout
: Lesen Sie diese Frage .quelle
Platzieren Sie Ihren Code in der
{ }
500
= 0,5 Sekunden2200
= 2,2 Sekundenetc.
quelle
ES-6-Lösung
Unten finden Sie einen Beispielcode, der aync / await verwendet , um eine tatsächliche Verzögerung zu erhalten.
Es gibt viele Einschränkungen und dies ist möglicherweise nicht nützlich, aber nur zum Spaß hier zu posten.
quelle
delay
Funktion muss NICHT asynchron sein. Diese großartige Verzögerung funktioniert, wenn ein Versprechen, das von einer regulären Funktion zurückgegeben wird, im Hauptteil einer asynchronen Funktion erwartet wird.Es gibt zwei (meistens verwendete) Arten von Timerfunktionen in Javascript
setTimeout
undsetInterval
( andere )Beide Methoden haben dieselbe Signatur. Sie übernehmen eine Rückruffunktion und die Verzögerungszeit als Parameter.
setTimeout
Wird nur einmal nach der Verzögerung ausgeführt, währendsetInterval
die Rückruffunktion nach jeder Verzögerung weiter aufgerufen wird.Beide Methoden geben eine Ganzzahl-ID zurück, mit der sie gelöscht werden können, bevor der Timer abläuft.
clearTimeout
undclearInterval
diese beiden Methoden verwenden eine Ganzzahlkennung, die von den obigen FunktionensetTimeout
und zurückgegeben wirdsetInterval
Beispiel:
setTimeout
Wenn Sie den obigen Code ausführen, werden Sie sehen, dass es Warnungen gibt
before setTimeout
undafter setTimeout
schließlichI am setTimeout
nach 1 Sekunde (1000 ms).Was Sie dem Beispiel entnehmen können, ist, dass das
setTimeout(...)
asynchron ist, was bedeutet, dass es nicht darauf wartet, dass der Timer abgelaufen ist, bevor es zur nächsten Anweisung übergeht, d. H.alert("after setTimeout");
Beispiel:
setInterval
Wenn Sie den obigen Code ausführen, werden Sie sehen, dass er alarmiert
before setInterval
undafter setInterval
schließlich alarmiertI am setInterval
feststellen, ausgibt, 5 Mal nach 1 Sekunde (1000 ms), da das setTimeout den Timer nach 5 Sekunden löscht, oder alle 1 Sekunde erhalten Sie eineI am setInterval
unendliche Warnung .Wie macht der Browser das intern?
Ich werde es kurz erklären.
Um zu verstehen, dass Sie über die Ereigniswarteschlange in Javascript Bescheid wissen müssen. Im Browser ist eine Ereigniswarteschlange implementiert. Immer wenn ein Ereignis in js ausgelöst wird, werden alle diese Ereignisse (wie Klick usw.) zu dieser Warteschlange hinzugefügt. Wenn Ihr Browser nichts auszuführen hat, nimmt er ein Ereignis aus der Warteschlange und führt es einzeln aus.
Nun, wenn Sie anrufen
setTimeout
odersetInterval
Ihr Rückruf bei einem Timer im Browser registriert wird und dieser nach Ablauf der angegebenen Zeit zur Ereigniswarteschlange hinzugefügt wird, nimmt Javascript das Ereignis aus der Warteschlange und führt es aus.Dies geschieht, weil die Javascript-Engine Single-Threaded ist und jeweils nur eine Sache ausführen kann. Sie können also kein anderes Javascript ausführen und Ihren Timer verfolgen. Aus diesem Grund sind diese Timer beim Browser registriert (Browser sind keine Single-Threaded-Timer) und können den Timer verfolgen und nach Ablauf des Timers ein Ereignis in die Warteschlange einfügen.
Gleiches gilt
setInterval
nur in diesem Fall, wenn das Ereignis nach dem angegebenen Intervall immer wieder zur Warteschlange hinzugefügt wird, bis es gelöscht oder die Browserseite aktualisiert wird.Daher kann es manchmal länger als die angegebene Verzögerungszeit dauern, bis Ihr Rückruf aufgerufen wird, insbesondere wenn Ihr anderer Code den Thread blockiert und ihm keine Zeit gibt, um zu verarbeiten, was sich in der Warteschlange befindet.
Und wie gesagt, Javascript ist ein einzelner Thread. Also, wenn Sie den Thread für lange blockieren.
Wie dieser Code
Ihr Benutzer erhält möglicherweise eine Nachricht, dass die Seite nicht antwortet .
quelle
setTimeout
wenn Sie kein asynchrones Verhalten wünschen.Für Synchronisierungsaufrufe können Sie die folgende Methode verwenden:
quelle
Wenn Sie eine Aktualisierung benötigen, ist dies eine weitere Möglichkeit:
quelle
Hier ist, was ich tue, um dieses Problem zu lösen. Ich bin damit einverstanden, dass dies auf das Timing-Problem zurückzuführen ist und eine Pause benötigt, um den Code auszuführen.
Dieser neue Code hält ihn 1 Sekunde lang an und führt in der Zwischenzeit Ihren Code aus.
quelle
Ich werde meinen Input geben, weil es mir hilft zu verstehen, was ich tue.
Um eine Diashow mit automatischem Bildlauf und einer Wartezeit von 3 Sekunden zu erstellen, habe ich Folgendes getan:
Denken Sie daran, wenn Sie setTimeout () wie folgt ausführen. Alle Timeout-Funktionen werden so ausgeführt, als ob sie gleichzeitig ausgeführt würden, vorausgesetzt, dass in setTimeout (nextImage, delayTime) die Verzögerungszeit statische 3000 Millisekunden beträgt.
Um dies zu berücksichtigen, fügte ich nach jeder zusätzlichen 3000 Milli / s für die Schleifeninkrementierung über hinzu
delayTime += timeIncrement;
.Für diejenigen, die sich hier interessieren, sieht mein nextImage () so aus:
quelle