Meilleure façon de mettre un délai après avoir appelé des fonctions javascript

J’utilise jquery pour appeler des fonctions javascript avec un délai entre elles.
J’utilise aussi Jquery Wait

Lorsque j’appelle la fonction ci-dessous, toutes les fonctions sont appelées de manière récurrente, il n’y a pas de délai entre elles.

$(this) .call(f1) .wait(5000) .call(f2) .wait(5000) .call(f3); 

Ici, call function appelle une fonction comme je l’ai fait

 $.fn.call = function (f) { if (f) f(); return this; }; 

Qu’est-ce que je fais mal ? Comment puis-je réaliser quelque chose comme ça?
Je vous remercie

Si vous voulez appeler une fonction toutes les 5 secondes, utilisez

 setTimeout(function(){f1},5000); setTimeout(function(){f2},10000); setTimeout(function(){f2},15000); 

si vous voulez appeler chaque fonction 5 secondes après la dernière utilisation terminée

 setTimeout(function(){f1;setTimeout(function(){f2;setTimeout(function(){f3},5000);},5000);},5000); 

Vous n’avez pas besoin de wait() de ce livre de cuisine; delay () est intégré et semble avoir les mêmes fonctionnalités. Mais l’une ou l’autre de ces fonctions implique l’ajout d’un élément à la queue interne des effets de jQuery, puis sa suppression après l’expiration du délai, c.-à-d. Qu’il ne s’agit pas d’une déclaration de veille, de sorte qu’il ne va pas attendre avant de revenir.

Si vous voulez utiliser delay() ou wait() , vous devez faire call() mettre la fonction en file d’ attente avec queue () . Juste des croquis, mais quelque chose comme:

 $.fn.call = function(f) { if (f) { $(this).queue(function() { f(); $(this).dequeue(); } } return this; } 

Ensuite, je m’attendrais à ce que votre code fonctionne comme vous le souhaitez.

Voici une fonction qui appelle en séquence un tableau de fonctions:

 $.fn.callFn = function(fns, delay) { var fn, that = this; if(fns.length > 0){ fn = fns.shift() fn && fn(); setTimeout(function(){ that.callFn(fns, delay); }, delay); } return this; }; 

Et vous l’appeleriez comme ça:

 $(this).callFn([f1, f2, f3], 2000); 
 $('#box').slideUp(300).delay(800).fadeIn(400); /* .delay = wait time = 800 (this means it will wait 800/1000 of a second/ "1000 = 1 second") */