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.
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);
Vous pouvez utiliser.stop ()
Arrêtez l'animation en cours d'exécution Sur les éléments correspondants.
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);
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);
});