J'utilise le module ngAnimate, mais tous mes ng-if
, ng-show
, etc. sont affectés par cela, je souhaite utiliser ngAnimate pour certains éléments sélectionnés .
merci.
Ajoutez simplement ceci à votre CSS. C'est mieux si c'est la dernière règle:
.no-animate {
-webkit-transition: none !important;
transition: none !important;
}
ajoutez ensuite no-animate
à la classe d’élément que vous souhaitez désactiver. Exemple:
<div class="no-animate"></div>
Si vous souhaitez activer les animations pour des éléments spécifiques (au lieu de les désactiver pour des éléments spécifiques), vous pouvez utiliser $ animateProvider pour configurer des éléments avec un nom de classe (ou une expression régulière) à animer.
Le code ci-dessous activera les animations pour les éléments ayant la classe angular-animate
:
var myApp = angular.module("MyApp", ["ngAnimate"]);
myApp.config(function($animateProvider) {
$animateProvider.classNameFilter(/angular-animate/);
})
Voici un exemple de balisage incluant la classe angular-animate
pour activer les animations:
<div ng-init="items=[1,2,3,4,5,6,7,8,9]">
<input placeholder="Filter with animations." ng-model="f" />
<div class="my-repeat-animation angular-animate" ng-repeat="item in items | filter:f track by item" >
{{item}}
</div>
</div>
Exemple Plunker emprunté et modifié à partir de ce blog où seul le premier filtre a des animations (en raison de la classe angular-animate
).
Veuillez noter que j'utilise angular-animate
à titre d'exemple et qu'il est complètement configurable à l'aide de la fonction .classNameFilter
.
Si vous avez le module ngAnimate comme dépendance de votre module, vous pouvez dissocier des animations dans AngularJS de deux manières:
Désactivez ou activez l'animation globalement sur le service $ animate:
$animate.enabled(false);
Désactiver les animations pour un élément spécifique - il doit s'agir de l'élément pour lequel angulaire ajoutera les classes CSSst d'animation (par exemple, ng-enter, ...)
$animate.enabled(false, theElement);
A partir de la version 1.4 angulaire, vous devez inverser les arguments:
$animate.enabled(theElement, false);
merci, j'ai écrit une directive que vous pouvez placer sur l'élément
CoffeeScript:
myApp.directive "disableAnimate", ($animate) ->
(scope, element) ->
$animate.enabled(false, element)
JavaScript:
myApp.directive("disableAnimate", function ($animate) {
return function (scope, element) {
$animate.enabled(false, element);
};
});
Pour désactiver ng-animate pour certains éléments, à l'aide d'une classe CSS, qui suit le paradigme de l'animation angulaire, vous pouvez configurer ng-animate pour tester la classe à l'aide de regex.
Config
var myApp = angular.module("MyApp", ["ngAnimate"]);
myApp.config(function($animateProvider) {
$animateProvider.classNameFilter(/^(?:(?!ng-animate-disabled).)*$/);
})
Utilisation
Ajoutez simplement la classe ng-animate-disabled
à tous les éléments que vous souhaitez ignorer par ng-animate.
Crédithttp://davidchin.me/blog/disable-nganimate-for-selected-elements/
J'ai trouvé que $animate.enabled(false, $element);
fonctionnera pour les éléments qui utilisent ng-show
ou ng-hide
mais cela ne fonctionnera pas pour les éléments qui utilisent ng-if
pour une raison quelconque! La solution que j'ai finalement utilisée consistait simplement à tout faire en CSS, ce que j'ai appris de ce fil sur GitHub .
CSS
/* Use this for transitions */
.disable-animations.ng-enter,
.disable-animations.ng-leave,
.disable-animations.ng-animate {
-webkit-transition: none !important;
transition: none !important;
}
/* Use this for keyframe animations */
.disable-animations.ng-animate {
-webkit-animation: none 0s;
animation: none 0s;
}
SCSS
.disable-animations {
// Use this for transitions
&.ng-enter,
&.ng-leave,
&.ng-animate {
-webkit-transition: none !important;
transition: none !important;
}
// Use this for keyframe animations
&.ng-animate {
-webkit-animation: none 0s;
animation: none 0s;
}
}
Je ne veux pas utiliser _ pour utiliser ngAnimate sur mon ng-if
, voici donc ma solution:
[ng-if] {
.ng-enter, .ng-leave, .ng-animate {
-webkit-transition: none !important;
transition: none !important;
}
}
Il suffit de poster ceci comme une autre suggestion!
J'ai une liste à partir de laquelle la première li
est masquée à l'aide de ng-hide="$first"
. En utilisant ng-enter
, la li
est affichée pendant une demi-seconde avant de disparaître.
Basé sur la solution de Chris Barr, mon code ressemble maintenant à ceci:
HTML
<ol>
<li ng-repeat="item in items"
ng-hide="$first"
ng-class="{'no-animate' : $first}">
</li>
</ol>
CSS
.no-animate.ng-enter,
.no-animate.ng-leave,
.no-animate.ng-animate {
transition: none !important; /* disable transitions */
animation: none 0s !important; /* disable keyframe animations */
}
li.ng-enter {
opacity: 0;
transition: opacity 0.3s ease-out;
}
li.ng-enter-active {
opacity: 1;
}
/* I use Autoprefixer. If you don't, please include vendor prefixes. */
Je sais que la réponse est différée, mais nous utilisons ici dans MainController:
// disable all animations
$animate.enabled(false);
Mais le problème est que lorsque nous désactivons toutes les animations, les ui-select sont configurés pour opacity: 0
.
Il est donc nécessaire de définir l'opacité sur 1 à l'aide de CSS:
.ui-select-choices {
opacity: 1 !important;
}
Ceci réglera correctement l'opacité et le ui-select fonctionnera.