JQuery : problème simple avec animate()

Résolu/Fermé
CrazyCow007 Messages postés 52 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 18 septembre 2012 - 11 sept. 2012 à 17:31
CrazyCow007 Messages postés 52 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 18 septembre 2012 - 14 sept. 2012 à 14:43
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 jeudi 13 septembre 2012 Statut Membre Dernière intervention 17 septembre 2012 2
14 sept. 2012 à 09:09
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 mardi 10 juin 2003 Statut Membre Dernière intervention 18 septembre 2012
Modifié par CrazyCow007 le 14/09/2012 à 11:12
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 jeudi 13 septembre 2012 Statut Membre Dernière intervention 17 septembre 2012 2
14 sept. 2012 à 11:37
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 mardi 10 juin 2003 Statut Membre Dernière intervention 18 septembre 2012
14 sept. 2012 à 11:38
Merci !
0
-nOg- Messages postés 16 Date d'inscription jeudi 13 septembre 2012 Statut Membre Dernière intervention 17 septembre 2012 2
14 sept. 2012 à 11:54
de rien,
résolu ?
0
CrazyCow007 Messages postés 52 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 18 septembre 2012
14 sept. 2012 à 14:43
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