C'est en fait assez facile à faire. Tout ce que vous avez à faire est de changer le css.
Voici un exemple d'une animation en fondu très simple : http://jsfiddle.net/elthrasher/sNpjH/
Pour en faire une animation glissante, j'ai d'abord dû placer mon élément dans une boîte (c'est le conteneur de glissement), puis j'ai ajouté un autre élément pour remplacer celui qui partait, juste parce que je pensais que ce serait joli. Enlevez-le et l'exemple fonctionnera toujours.
J'ai changé l'animation css de 'fade' à 'slide' mais notez que ce sont les noms que je leur ai donnés. J'aurais pu écrire une css d'animation de diapositives nommée "fade" ou n'importe quoi d'autre d'ailleurs.
La partie importante est ce qui se trouve dans la css. Voici la css originale de 'fade' :
.fade-hide, .fade-show {
-webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
-moz-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
-o-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
}
.fade-hide {
opacity:1;
}
.fade-hide.fade-hide-active {
opacity:0;
}
.fade-show {
opacity:0;
}
.fade-show.fade-show-active {
opacity:1;
}
Ce code fait passer l'opacité de l'élément de 0 (complètement transparent) à 1 (complètement opaque) et inversement. La solution consiste à ne pas toucher à l'opacité et à modifier plutôt le haut (ou la gauche, si vous voulez vous déplacer de gauche à droite).
.slide-hide, .slide-show {
-webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;
-moz-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;
-o-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;
transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;
}
.slide-hide {
position: relative;
top: 0;
}
.slide-hide.slide-hide-active {
position: absolute;
top: -100px;
}
.slide-show {
position: absolute;
top: 100px;
}
.slide-show.slide-show-active {
position: relative;
top: 0px;
}
Je passe également d'un positionnement relatif à un positionnement absolu afin qu'un seul des éléments occupe de l'espace dans le conteneur à la fois.
Voici le produit fini : http://jsfiddle.net/elthrasher/Uz2Dk/ . J'espère que cela vous aidera !
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