web-dev-qa-db-fra.com

jQuery: Wait / Delay 1 seconde sans exécuter le code

Je ne parviens pas à faire fonctionner la méthode .delay dans jQuery:

$.delay(3000); // not working
$(queue).delay(3000); // not working

J'utilise une boucle while pour attendre qu'une valeur changeante incontrôlée soit supérieure ou égale à une autre et que je ne trouve aucun moyen d'interrompre l'exécution pendant X secondes.

109
Brian Graham

$ .delay est utilisé pour retarder les animations dans une file d'attente, pas pour arrêter l'exécution.

Au lieu d'utiliser une boucle while, vous devez appeler de manière récursive une méthode qui effectue le contrôle toutes les secondes à l'aide de setTimeout:

var check = function(){
    if(condition){
        // run when condition is met
    }
    else {
        setTimeout(check, 1000); // check again in a second
    }
}

check();
162
Justin Niessner

Vous pouvez aussi simplement retarder une opération de cette façon:

setTimeout(function (){

  // Something you want delayed.

}, 5000); // How long do you want the delay to be (in milliseconds)? 
188
Matt Sich

la fonction delay de jQuery est destinée à être utilisée avec des effets et des files d'attente d'effets, voir le delay docs et l'exemple ci-dessous:

$('#foo').slideUp(300).delay(800).fadeIn(400);

Si vous voulez observer une variable pour les changements, vous pouvez faire quelque chose comme

(function() {
    var observerInterval = setInterval(function() {
        if (/* check for changes here */) {
           clearInterval(observerInterval);
           // do something here
        }
    }, 1000);
})();
8
Julian D.

JavaScript setTimeout est une très bonne solution:

function funcx()
   {
   // your code here
   // break out here if needed
   setTimeout(funcx, 3000);
   }

funcx();

La fonction delay de jQuery est principalement utilisée pour retarder des animations dans une file d'attente d'animation jQuery.

8
Jay Tomten

es6 setTimeout

setTimeout(() => {
  console.log("we waited 204586560000 ms to run this code, oh boy wowwoowee!");
}, 204586560000);

Edit: 204586560000 ms est le temps approximatif entre la question initiale et cette réponse ... en supposant que j'ai calculé correctement.

6
thedanotto

Seulement javascript Cela fonctionnera sans 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>
5
Faruk Omar

delay() n'arrête pas le flux de code, puis le réexécute. Il n'y a pas de moyen pratique de faire ça en JavaScript. Tout doit être fait avec des fonctions qui prennent des rappels tels que setTimeout que d'autres ont mentionné.

La fonction delay() de jQuery consiste à faire attendre une file d'attente d'animation avant son exécution. Ainsi, par exemple, $(element).delay(3000).fadeIn(250); fera apparaître l'élément après 3 secondes.

5
Nathan MacInnes

Javascript est un langage de programmation asynchrone, vous ne pouvez donc pas arrêter l'exécution pendant un certain temps; la seule façon de [pseudo] arrêter une exécution consiste à utiliser setTimeout (), qui n'est pas un délai mais un "rappel de fonction retardé".

4
Fabio Buda

C'est aussi simple que cela:

function delay(seconds) {
   var x = 0;
   setTimeout(function() {
      if(x){
         return undefined;
      }
      x++;
   }, seconds * 1000);
}
for(var x = 0; x < 5; x++){
   alert("hi");
   delay(10);
}
0
Raphael Spoerri