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.
$ .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();
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)?
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);
})();
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.
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.
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>
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.
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é".
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);
}