web-dev-qa-db-fra.com

Comment arrêter/remplacer une fonction Jquery TimeOut?

J'ai un petit fragment de code jQuery qui affiche un message de notification en haut de l'écran en réponse aux actions de l'utilisateur sur une page. La notification est souvent affichée après les actions Ajax contenant un contenu dynamique.

Par exemple:

$("#mini-txt").html("Thank you!");
$("#mini").fadeIn("fast");
setTimeout(function() {$("#mini").animate({height: "hide", opacity: "hide"}, "medium");}, 3000);

La notification fonctionne bien, sauf lorsqu'un utilisateur exécute deux actions ou plus en succession rapide. Dans ce cas, la fonction TimeOut s'embrouille et le deuxième message semble arriver dans les 3000 millisecondes précédentes.

Existe-t-il un moyen de "supprimer" la notification précédente si une nouvelle action est effectuée. Je n'ai aucun problème avec les actions/sélecteurs, juste avec la fonction TimeOut ... soit en l'arrêtant, soit en le dépassant d'une manière ou d'une autre. Ou peut-être qu'il y a une meilleure alternative pour que le message reste sur l'écran quelques secondes avant de disparaître?

Je vous remercie.

27
Tom

Premièrement, vous stockez la valeur de retour pour la fonction setTimeout:

// Set the timeout
var timeout = setTimeout(function()
    {
        // Your function here
    }, 2000);

Ensuite, lorsque vous êtes prêt à supprimer le délai d'attente, vous appelez simplement clearTimeout avec la valeur stockée de l'appel précédent à setTimeout.

// Then clearn the timeout
clearTimeout(timeout);
58
Justin Niessner

Vous pouvez utiliser.stop ()

Arrêtez l'animation en cours d'exécution Sur les éléments correspondants.

6
rahul

jQuery 1.4 a une méthode intégrée pour gérer les délais pour les animations, vous pouvez faire quelque chose comme ceci:

$("#mini-txt").html("Thank you!");
$("#mini").fadeIn("fast").delay(3000).animate({height: "hide", opacity: "hide"}, "medium");

Et plus tard, quand vous voulez nettoyer la file d’animation, vous pouvez faire:

$("#mini").stop(true);
6
PetersenDidIt

Cela effacera le délai d'attente après l'exécution de la fonction avec un délai de 500 ms

var timeout = setTimeout(function(){

/* YOUR FUNCTION */

}, 500, function(){
   clearTimeout(timeout);
});
0
Tadeusz Majkowski