JQuery : problème simple avec animate()

Résolu
CrazyCow007 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   -  
CrazyCow007 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je suis relativement débutant avec JQuery. Je souhaite mettre en place un système simple de notifications.

Voici le script actuel :
function msg(txt) {
    if(txt) {
        $("#message").html(txt);

        $('#message').animate({
            top: '14'
        }, 1000, "easeOutBounce", function() {
            // Animation complete
            setTimeout(
                function() {
                    $('#message').animate({
                        top: '-66'
                    }, 1000 )}, 1500);
        });
    }
}


Explications : un message s'affiche en haut au centre de l'écran avec un effet de rebondissement. Après 1,5s ce message disparaît.

Mon problème est que ça devient un peu buggé lorsque je fais appel une seconde fois à cette fonction avant que le message précédent ait disparu.

Je pense que le meilleur moyen serait d'annuler l'effet de disparition lorsqu'un nouveau message est affiché de relancer le Timeout pour 1,5s, mais je ne sais pas bien comment le réaliser. J'ai vu la fonction clearQueue() mais je n'ai pas bien compris si ça pourrait répondre à ma problématique.

Je vous remercie par avance pour vos conseils !

2 réponses

-nOg- Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   2
 
J'ai eu un problème similaire, ceci avait résolu mon problème :

$("#message",this).stop(true,true);

$('#message').animate({
top: '14'
...
0
CrazyCow007 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention  
 
Oui ça permet effectivement de régler le problème. J'ai aussi opté pour cette solution.

Mais ce n'est pas exactement la solution idéale où la bulle resterait en place, le texte change et le délai avant disparition est repoussé à nouveau à 1,5 seconde.

Je poste le code définitif que j'utilise actuellement (qui utilise cette fonction stop()) :

function msg(txt) {   
    if(txt) {   
        $('#message').stop(true, true).css({top: -66}).html(txt).   
            animate({top: 14}, 800, 'easeOutBounce').delay(1500).   
            animate({top: -66}, 1000);   
    }   
}   


NB : A quoi te sert le
this
dans
$("#message",this)
?
0
-nOg- Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   2
 
une erreur, de ma part le this. J'ai copié un de mes bouts de code, désolé.
C'est un 2 eme selector.
$(selector1, selector2, selector3)

une page intéressante, si tu veux aller plus loin dans les queues et les stop
https://css-tricks.com/examples/jQueryStop/
0
CrazyCow007 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention  
 
Merci !
0
-nOg- Messages postés 16 Date d'inscription   Statut Membre Dernière intervention   2
 
de rien,
résolu ?
0
CrazyCow007 Messages postés 52 Date d'inscription   Statut Membre Dernière intervention  
 
Oui, mais si quelqu'un arrive à trouver une solution pour le fonctionnement que j'ai décrit ci-dessus, il est le bienvenu (d'autres personnes peuvent éventuellement être intéressées).
0