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") */