Nie mogę uzyskać .delay
metody działającej w jQuery:
$.delay(3000); // not working
$(queue).delay(3000); // not working
Używam pętli while, aby czekać, aż niekontrolowana zmieniająca się wartość będzie większa lub równa innej i nie mogę znaleźć sposobu na zatrzymanie wykonania przez X sekund.
Odpowiedzi:
$ .delay służy do opóźniania animacji w kolejce, a nie do zatrzymywania wykonywania.
Zamiast używać pętli while, musisz rekurencyjnie wywołać metodę, która wykonuje sprawdzenie co sekundę, używając
setTimeout
:var check = function(){ if(condition){ // run when condition is met } else { setTimeout(check, 1000); // check again in a second } } check();
źródło
setTimeout()
.Możesz także opóźnić niektóre operacje w ten sposób:
setTimeout(function (){ // Something you want delayed. }, 5000); // How long do you want the delay to be (in milliseconds)?
źródło
ES6 setTimeout
setTimeout(() => { console.log("we waited 204586560000 ms to run this code, oh boy wowwoowee!"); }, 204586560000);
Edycja: 204586560000 ms to przybliżony czas między oryginalnym pytaniem a tą odpowiedzią ... zakładając, że obliczyłem poprawnie.
źródło
delay
Funkcja jQuery ma być używana z efektami i kolejkami efektów, zobaczdelay
dokumentację i przykład w niej:$('#foo').slideUp(300).delay(800).fadeIn(400);
Jeśli chcesz obserwować zmienną pod kątem zmian, możesz zrobić coś takiego
(function() { var observerInterval = setInterval(function() { if (/* check for changes here */) { clearInterval(observerInterval); // do something here } }, 1000); })();
źródło
JavaScript
setTimeout
to bardzo dobre rozwiązanie:function funcx() { // your code here // break out here if needed setTimeout(funcx, 3000); } funcx();
delay
Funkcja jQuery jest stosowany głównie do opóźniania animacji w kolejce animacji jQuery.źródło
delay()
nie zatrzymuje przepływu kodu, a następnie uruchamia go ponownie. Nie ma praktycznego sposobu na zrobienie tego w JavaScript. Wszystko musi być zrobione z funkcjami, które przyjmują wywołania zwrotne, osetTimeout
których wspominali inni.Celem jQuery
delay()
jest, aby kolejka animacji czekała przed wykonaniem. Na przykład$(element).delay(3000).fadeIn(250);
sprawi, że element zniknie po 3 sekundach.źródło
Jeśli korzystasz z funkcji ES6 i korzystasz z funkcji asynchronicznej, możesz skutecznie zatrzymać wykonywanie kodu na określony czas za pomocą tej funkcji:
const delay = millis => new Promise((resolve, reject) => { setTimeout(_ => resolve(), millis) });
Oto jak tego używasz:
await delay(5000);
Zatrzyma się na żądaną liczbę milisekund, ale tylko wtedy, gdy jesteś w funkcji asynchronicznej . Przykład poniżej:
const myFunction = async function() { // first code block ... await delay(5000); // some more code, executed 5 seconds after the first code block finishes }
źródło
await setTimeout(_ => {}, millis);
a następnie przechodząc do następnej linii.Javascript jest asynchronicznym językiem programowania, więc nie można zatrzymać wykonywania przez pewien czas; jedynym sposobem na [pseudo] zatrzymanie wykonania jest użycie setTimeout (), które nie jest opóźnieniem, ale „opóźnionym wywołaniem zwrotnym funkcji”.
źródło
Tylko javascript Będzie działać bez jQuery
<!DOCTYPE html> <html> <head> <script> function sleep(miliseconds) { var currentTime = new Date().getTime(); while (currentTime + miliseconds >= new Date().getTime()) { } } function hello() { sleep(5000); alert('Hello'); } function hi() { sleep(10000); alert('Hi'); } </script> </head> <body> <a href="#" onclick="hello();">Say me hello after 5 seconds </a> <br> <a href="#" onclick="hi();">Say me hi after 10 seconds </a> </body> </html>
źródło