116 votes

Fonction wait() ou sleep() dans jquery ?

Je veux ajouter une classe, attendre 2 secondes et ajouter une autre classe.

.addClass("load").wait(2sec).addClass("done");

Y a-t-il un moyen ?

206voto

ctcherry Points 15112

SetTimeout exécutera un certain code après un délai d'une certaine durée (mesurée en millisecondes). Cependant, une note importante : en raison de la nature du javascript, le reste du code continue à s'exécuter après la mise en place du timer :

$('#someid').addClass("load");

setTimeout(function(){
  $('#someid').addClass("done");
}, 2000);

// Any code here will execute immediately after the 'load' class is added to the element.

2 votes

C'est une mauvaise solution pour le moment car elle perd l'avantage d'avoir le contrôle de l'animation par jquery, comme .stop(). une bien meilleure solution est .delay()

7 votes

@utilisateur123blahblah ... c'est le PROPRE solution à la question (qui n'a rien à voir avec l'animation). .delay ne fait rien en dehors de la file d'attente de l'animation. Ceux qui ont voté pour votre commentaire erroné se sont trompés eux-mêmes.

34voto

Oscar Godson Points 6070

Ce serait .delay() .

http://api.jquery.com/delay/

Si vous faites des trucs AJAX, vous ne devriez pas écrire automatiquement "done", mais plutôt attendre une réponse et voir si c'est vraiment fait.

1 votes

Aussi, Steven, vous voulez .removeClass('load') sinon vous ajoutez à la fois les classes load et done, ce qui est probablement indésirable. Si vous attendez effectivement qu'une action asynchrone se termine, votre meilleure chance est de faire .addClass QUAND elle se termine et est réussie, sinon .addClass('error') peut être une idée.

55 votes

La fonction "delay()" de jQUery ne fournit en aucun cas une fonction d'attente à usage général. Elle fait partie du système d'animation et ne s'applique qu'à la file d'attente de l'animation. La fonction revient toujours immédiatement, et l'exécution se poursuit sans pause.

21voto

madlee Points 409

Je réalise que c'est une vieille question, mais j'ai écrit un plugin pour répondre à ce problème que quelqu'un pourrait trouver utile.

https://github.com/madbook/jquery.wait

vous permet de le faire :

$('#myElement').addClass('load').wait(2000).addClass('done');

2voto

DA. Points 15714

Il existe une méthode d'attente dans jQuery :

http://docs.jquery.com/Cookbook/wait

-1voto

En utilisant la fonction setTimeout, par exemple Visitez ici pour un exemple

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X