Cette animation javascript basée sur des classes fonctionne dans AngularJS 1.2 (et 1.4 testé)
Modifier : J'ai fini par abandonner ce code pour prendre une direction complètement différente. J'aime mon autre réponse est bien meilleure . Cette réponse vous posera des problèmes dans certaines situations.
myApp.animation('.ng-show-toggle-slidedown', function(){
return {
beforeAddClass : function(element, className, done){
if (className == 'ng-hide'){
$(element).slideUp({duration: 400}, done);
} else {done();}
},
beforeRemoveClass : function(element, className, done){
if (className == 'ng-hide'){
$(element).css({display:'none'});
$(element).slideDown({duration: 400}, done);
} else {done();}
}
}
}) ;
Il suffit d'ajouter le .ng-hide-toggle-slidedown
à l'élément conteneur, et le comportement de glissement vers le bas de jQuery sera mis en œuvre sur la base de la classe ng-hide.
Vous devez inclure le $(element).css({display:'none'})
dans le beforeRemoveClass
car jQuery n'exécutera pas un slideDown à moins que l'élément ne soit dans un état de display: none
avant de lancer l'animation jQuery. AngularJS utilise le code CSS
.ng-hide:not(.ng-hide-animate) {
display: none !important;
}
pour masquer l'élément. jQuery n'est pas au courant de cet état, et il aura besoin de l'élément display:none
avant la première animation de glissement vers le bas.
L'animation AngularJS ajoutera le .ng-hide-animate
y .ng-animate
pendant que l'animation se déroule.
1 votes
Je ne pense pas que vous serez en mesure de faire en sorte que ng-show gère les animations. Ce n'est pas son utilisation prévue. C'est à cela que sert ng-animate. Pourquoi voulez-vous utiliser spécifiquement ng-show ?
1 votes
Merci Jonathan. Je pense que vous vous trompez. L'exemple donné fait exactement cela : une combinaison de ng-show et de ng-animate (cherchez "Animating ngShow & ngHide"). Quoi qu'il en soit, ce que je veux, c'est simplement un effet pour afficher/cacher une division qui glisse vers le haut et vers le bas.
0 votes
Mon erreur, je n'ai pas fait usage de ng-animate. Il semble qu'ils fonctionnent en conjonction l'un avec l'autre.
0 votes
Vous pourriez essayer d'utiliser le
line-height
attribut css, de 0 à 100%. Parfois ça marche... Postez votre bricolage pour que nous puissions mieux vous aider. Si vous trouvez un bon moyen de faire cela, envoyez-le moi, pour mettre cet échantillon sur mon site : AngularJS Ng-Animate0 votes
Regardez ça nganimate.org