Ben ngAnimate modülü kullanıyorum, ancak tüm benim ng-if
, ng-show
vb, bu etkilenir, bazı seçilmiş elemanlar için kaldıraç ngAnimate istiyorum. Performans ve çok hızlı gösteren ve gizlenen öğelerdeki bazı hatalar için.
Teşekkürler.
Ben ngAnimate modülü kullanıyorum, ancak tüm benim ng-if
, ng-show
vb, bu etkilenir, bazı seçilmiş elemanlar için kaldıraç ngAnimate istiyorum. Performans ve çok hızlı gösteren ve gizlenen öğelerdeki bazı hatalar için.
Teşekkürler.
display:block
tüm tekrarlayıcılarınıza güç vermesidir :ng-hide-add-active, .ng-hide-remove { display: block!important; }
Yanıtlar:
Sadece bunu CSS'nize ekleyin. Son kural olması en iyisidir:
.no-animate {
-webkit-transition: none !important;
transition: none !important;
}
ardından no-animate
devre dışı bırakmak istediğiniz öğe sınıfına ekleyin . Misal:
<div class="no-animate"></div>
.no-animate, .no-animate-children *
Çocukları vb.
Belirli öğeler için animasyonları etkinleştirmek istiyorsanız (belirli öğeler için devre dışı bırakmanın aksine ), canlandırmak için belirli bir sınıf adına (veya regex) sahip öğeleri yapılandırmak için $ animateProvider'ı kullanabilirsiniz .
Aşağıdaki kod, angular-animate
sınıfa sahip öğeler için animasyonları etkinleştirecektir :
var myApp = angular.module("MyApp", ["ngAnimate"]);
myApp.config(function($animateProvider) {
$animateProvider.classNameFilter(/angular-animate/);
})
angular-animate
Animasyonları etkinleştirmek için sınıfı içeren örnek işaretleme :
<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 örneği , yalnızca ilk filtrenin animasyonlara sahip olduğu bu blogdan ödünç alınmış ve değiştirilmiştir ( angular-animate
sınıfa sahip olduğu için ).
Lütfen angular-animate
örnek olarak kullandığımı ve .classNameFilter
işlev kullanılarak tamamen yapılandırılabileceğini unutmayın .
/^(?:(?!ng-animate-disabled).)*$/
devre dışı bırakmak için normal ifadeyi kullanın ng-animate-disabled
.
Modülünüze bağımlı olarak ngAnimate modülüne sahipseniz, AngularJS'de animasyonları dağıtmanın iki yolu vardır:
$ Animate hizmetinde animasyonu genel olarak devre dışı bırakın veya etkinleştirin:
$animate.enabled(false);
Belirli bir öğe için animasyonları devre dışı bırakın - bu, bu açısal öğe olmalıdır, animationstate css sınıflarını ekler (örneğin ng-enter, ...)!
$animate.enabled(false, theElement);
Angular 1.4 sürümünden itibaren argümanları tersine çevirmelisiniz:
$animate.enabled(theElement, false);
Angular animate paradigmasını izleyen bir CSS sınıfı kullanarak belirli öğeler için ng-animate'i devre dışı bırakmak için, normal ifadeyi kullanarak sınıfı test etmek için ng-animate'i yapılandırabilirsiniz.
Yapılandırma
var myApp = angular.module("MyApp", ["ngAnimate"]);
myApp.config(function($animateProvider) {
$animateProvider.classNameFilter(/^(?:(?!ng-animate-disabled).)*$/);
})
Kullanım
ng-animate-disabled
Sınıfı, ng-animate ile yok sayılmasını istediğiniz öğelere eklemeniz yeterlidir .
Kredi http://davidchin.me/blog/disable-nganimate-for-selected-elements/
teşekkürler, elemente yerleştirebileceğiniz bir yönerge yazdım
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);
};
});
$animate.enabled(element,false);
Bunun veya $animate.enabled(false, $element);
kullanan öğeler için işe yarayacağını buldum, ancak herhangi bir nedenle kullanılan öğeler için işe yaramayacak ! Sonunda kullandığım çözüm, hepsini GitHub'daki bu iş parçacığından öğrendiğim CSS'de yapmaktı .ng-show
ng-hide
ng-if
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;
}
}
li
İlkinin kullanılarak gizlendiği bir listem var ng-hide="$first"
. Ortadan kaybolmadan önce yarım saniye gösterilen varlıktaki ng-enter
sonuçları kullanmak li
.
Chris Barr'ın çözümüne dayanarak, kodum artık şöyle görünüyor:
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. */
Bunun gecikmiş bir cevap olduğunu biliyorum, ancak burada MainController'da kullanıyoruz:
// disable all animations
$animate.enabled(false);
Ancak sorun şu ki, tüm animasyonları devre dışı bıraktığımızda, ui-select'in yapılandırılması opacity: 0
.
Bu nedenle, opaklığı CSS kullanarak 1'e ayarlamak gereklidir:
.ui-select-choices {
opacity: 1 !important;
}
Bu, opaklığı uygun şekilde ayarlayacak ve ui-select çalışacaktır.