私はngAnimateモジュールを使用していますが、すべてのng-if
、ng-show
などはその影響を受けます。選択したいくつかの要素に対してngAnimateを活用したいと思います。非常に高速に表示および非表示にする要素のパフォーマンスといくつかのバグについて。
ありがとう。
これをCSSに追加するだけです。最後のルールである場合が最適です。
.no-animate {
-webkit-transition: none !important;
transition: none !important;
}
次に、無効にする要素のクラスにno-animate
を追加します。例:
<div class="no-animate"></div>
特定の要素のアニメーションを無効にするのではなく、特定の要素のアニメーションを有効にする場合は、 $ animateProvider を使用して、特定のクラス名(または正規表現)で要素を構成してアニメーション化できます。
以下のコードは、angular-animate
クラスを持つ要素のアニメーションを有効にします:
var myApp = angular.module("MyApp", ["ngAnimate"]);
myApp.config(function($animateProvider) {
$animateProvider.classNameFilter(/angular-animate/);
})
アニメーションを有効にするangular-animate
クラスを含むマークアップの例を次に示します。
<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>
Plunkerこのブログ から借用および変更した例(最初のフィルターのみにアニメーションがあります(angular-animate
クラスがあるため)。
例としてangular-animate
を使用しており、.classNameFilter
関数を使用して完全に構成可能であることに注意してください。
モジュールの依存関係としてモジュールngAnimateがある場合、AngularJSでアニメーションをディスベールできる2つの方法があります。
$ animateサービスでグローバルにアニメーションを無効または有効にします。
$animate.enabled(false);
特定の要素のアニメーションを無効にします。これは、angularの要素である必要があり、animationstate cssクラス(ng-enterなど)が追加されます。
$animate.enabled(false, theElement);
Angular 1.4バージョンでは、引数を逆にする必要があります。
$animate.enabled(theElement, false);
おかげで、要素に配置できるディレクティブを作成しました
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);
};
});
Angular animateパラダイムに従うCSSクラスを使用して、特定の要素のng-animateを無効にするには、正規表現を使用してクラスをテストするようにng-animateを構成できます。
Config
var myApp = angular.module("MyApp", ["ngAnimate"]);
myApp.config(function($animateProvider) {
$animateProvider.classNameFilter(/^(?:(?!ng-animate-disabled).)*$/);
})
使用法
Ng-animateで無視したい要素にng-animate-disabled
クラスを追加するだけです。
クレジットhttp://davidchin.me/blog/disable-nganimate-for-selected-elements/
$animate.enabled(false, $element);
はng-show
またはng-hide
を使用する要素に対して機能しますが、は機能しません何らかの理由でng-if
を使用する要素の場合!最終的に使用した解決策は、CSSですべてを行うことでした。これは、 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;
}
}
NOTng-if
でngAnimateを使用したいので、これが私の解決策になります。
[ng-if] {
.ng-enter, .ng-leave, .ng-animate {
-webkit-transition: none !important;
transition: none !important;
}
}
これを別の提案として投稿するだけです!
ng-hide="$first"
を使用して最初のli
を非表示にするリストがあります。 ng-enter
を使用すると、li
が0.5秒表示されてから消えます。
Chris Barrのソリューションに基づいて、私のコードは次のようになります。
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. */
遅延応答であることは知っていますが、ここではMainControllerで使用します。
// disable all animations
$animate.enabled(false);
しかし問題は、すべてのアニメーションを無効にすると、ui-selectがopacity: 0
に設定されることです。
そのため、CSSを使用して不透明度を1に設定する必要があります。
.ui-select-choices {
opacity: 1 !important;
}
これにより、不透明度が適切に設定され、ui-selectが機能します。