2010-11-19 6 views
1

Je me suis amusé avec ce petit détail minuscule pendant des heures maintenant et j'ai finalement abandonné même si je suis sûr que la solution est vraiment très simple.jQuery animez glisser vers le bas sur le clic, mais pas sur le clic

J'ai un panneau appelé ".address" dans un div avec débordement: caché donc il n'est pas affiché avant que la fonction soit activée. Lorsque vous cliquez sur le bouton ".click", je veux que l'adresse div descende de la zone cachée et dans la vue visible. Jusqu'à présent, cela fonctionne, mais je n'arrive pas à comprendre pourquoi il ne va pas glisser vers le haut sur le deuxième clic.

$(".click").click(function(){ 
     $(".address").animate({top:"0"},{duration:200}); 
      }, function() { 
     $(".address").animate({top:"-55px"},{duration:200}); 
    }); 

Quelqu'un peut-il m'expliquer la solution à ce problème? C'est probablement une solution évidente, mais je ne peux tout simplement pas comprendre.

+0

visite cette url: http://stackoverflow.com/questions/23138728/how-to-make-two-functions-react-on-a-click?answertab=oldest#tab-top theres une bonne explication – Junske

Répondre

3

Il y a .toggle() pour choisir entre deux (ou plus) des fonctions (plutôt que .click() qui est juste en utilisant votre première fonction), comme ceci:

$(".click").toggle(function(){ 
    $(".address").animate({top:"0"},{duration:200}); 
}, function() { 
    $(".address").animate({top:"-55px"},{duration:200}); 
}); 
+0

Je lancerais un stop() là avant chaque animation() afin que les clics supplémentaires ne rebondissent pas le conteneur ouvert et ferme un tas de fois. –

+0

@Surreal - La durée est tellement courte qu'il serait difficile de créer beaucoup d'arriérés d'animations. Sinon '.stop()' est une bonne idée. – user113716

+0

Hé, je n'ai même pas pensé à la durée. Je suis vraiment juste un stickler sur les animations bondissantes. :) –

0

est ici une approche ludique.

$(".click").click(function() { 
    var idx = 0; 
    return function() { 
     $(".address").animate({top: (idx = ++idx % 2) ? 0 : -55}, {duration: 200}); 
    }; 
}()); 

Exemple:http://jsfiddle.net/jSsgM/1/

@Nick's solution est plus propre et plus sensible, et devrait être utilisé surtout si vous allez faire quelque chose de plus complexe.

Questions connexes