fonction wait () ou sleep () dans jquery?


101

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?

Réponses:


187

setTimeout exécutera du code après un délai d'un certain temps (mesuré en millisecondes). Cependant, une note importante: en raison de la nature du javascript, le reste du code continue de s'exécuter après la configuration du minuteur:

$('#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
c'est une mauvaise solution pour le moment car elle perd l'avantage d'avoir le contrôle jquery sur l'animation, comme .stop (). une bien meilleure solution est .delay ()
user151496

7
@ user123blahblah ... c'est la bonne solution pour la question (qui n'a rien à voir avec l'animation). .delay fait des jack beans en dehors de la file d'attente d'animation Quiconque a voté pour votre commentaire erroné s'est induit en erreur.
IncredibleHat

34

Ce serait .delay().

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

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


1
Aussi Steven vous voulez que .removeClass('load')votre ajout des deux classes se charge et se termine, ce qui est probablement indésirable. Si vous attendez effectivement qu'une action asynchrone se termine, votre meilleur pari est de faire .addClass QUAND elle se termine et réussit, sinon .addClass ('erreur') peut-être une idée
Gary Green

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

22

delay () ne fera pas le travail. Le problème avec delay () est qu'il fait partie du système d'animation et ne s'applique qu'aux files d'attente d'animation.

Et si vous voulez attendre avant d'exécuter quelque chose en dehors de l'animation ??

Utilisez ceci:

window.setTimeout(function(){
                 // do whatever you want to do     
                  }, 600);

Que se passe-t-il?: Dans ce scénario, il attend 600 millisecondes avant d'exécuter le code spécifié entre les accolades.

Cela m'a beaucoup aidé une fois que je l'ai compris et j'espère que cela vous aidera également!

AVIS IMPORTANT: «window.setTimeout» se produit de manière asynchrone. Gardez cela à l'esprit lorsque vous écrivez votre code!


20

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

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

vous permet de faire ceci:

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

2
Merci beaucoup madlee!
phil294

2

Il y a une fonction, mais c'est extra: http://docs.jquery.com/Cookbook/wait

Ce petit extrait de code vous permet d'attendre:

$.fn.wait = function(time, type) {
    time = time || 1000;
    type = type || "fx";
    return this.queue(type, function() {
        var self = this;
        setTimeout(function() {
            $(self).dequeue();
        }, time);
    });
};


0

Le plugin xml4jQuery donne la méthode sleep (ms, callback). La chaîne restante serait exécutée après la période de sommeil.

$(".toFill").html("Click here")
                .$on('click')
                .html('Loading...')
                .sleep(1000)
                .html( 'done')
                .toggleClass('clickable')
                .prepend('Still clickable <hr/>');
.toFill{border: dashed 2px palegreen; border-radius: 1em; display: inline-block;padding: 1em;}
        .clickable{ cursor: pointer; border-color: blue;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
   <script type="text/javascript" src="https://cdn.xml4jquery.com/ajax/libs/xml4jquery/1.1.2/xml4jquery.js"></script>
        <div class="toFill clickable"></div>


-1

Utilisation de la fonction setTimeout, par exemple Visitez ici par exemple


21
Il est préférable de ne pas se fier à un lien pour la majorité de votre réponse
James Jenkins

6
Pour sauvegarder le commentaire de @JamesJenkins, c'est parce que les liens ne sont pas toujours fiables. Si une personne doit ajouter un lien, il est préférable d'inclure également le code lui-même dans votre réponse.
Tass
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.