gpt4 book ai didi

css - ngAnimate - 动画不会在重复的自定义指令上触发

转载 作者:太空宇宙 更新时间:2023-11-04 02:14:00 27 4
gpt4 key购买 nike

我想在使用 ng-repeat 重复的自定义指令上使用 ngAnimate。如果我在一个简单的 html 列表项上使用 ng-repeat,动画效果很好。但是,只要用自定义指令元素替换列表项,就不会触发动画。

我错过了什么/做错了什么?

代码(Plunker Demo):

HTML

<h3>Simple ng-repeat</h3>
<ul>
<li class="animate-repeat" ng-repeat="val in testValues">{{ val }}</li>
</ul>

<h3>ng-repeat on custom directive</h3>
<ul >
<animation-test class="animate-repeat" ng-repeat="val in testValues" test-val="val"></animation-test>
</ul>

Javascript

var app = angular.module('application', ['ngAnimate']);

app.controller('mainController', [ '$scope', mainController]);

function mainController($scope){

// just for demo purposes
$scope.testValues = [];

$scope.addItem = function(){
var len = $scope.testValues.length;
$scope.testValues.unshift('Value #' + len);
};

$scope.removeItem = function(){
$scope.testValues.pop();
};

}

app.directive('animationTest', animationTest);

function animationTest(){

return {
template: ' <li> {{testVal}} </li> ',
scope: {
testVal: '<'
}
};
}

CSS(使用 animate.css )

.animate-repeat.ng-enter {
animation: 0.5s slideInUp;
}

.animate-repeat.ng-leave,
.animate-repeat.ng-move {
animation: 0.5s slideOutDown;

}



@-webkit-keyframes slideInUp {
from {
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
visibility: visible;
}

to {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
}

@keyframes slideInUp {
from {
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
visibility: visible;
}

to {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}
}

.slideInUp {
-webkit-animation-name: slideInUp;
animation-name: slideInUp;
}

@-webkit-keyframes slideOutDown {
from {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}

to {
visibility: hidden;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
}
}

@keyframes slideOutDown {
from {
-webkit-transform: translate3d(0, 0, 0);
transform: translate3d(0, 0, 0);
}

to {
visibility: hidden;
-webkit-transform: translate3d(0, 100%, 0);
transform: translate3d(0, 100%, 0);
}
}

.slideOutDown {
-webkit-animation-name: slideOutDown;
animation-name: slideOutDown;
}

最佳答案

您可以简单地将指令绑定(bind)到 <li>然后使您的确切代码工作的元素。因此只需将指令的 HTML 更改为:

<li animation-test class="animate-repeat" ng-repeat="val in testValues" test-val="val"></li>

你的指令是:

app.directive('animationTest', animationTest);

function animationTest(){

return {
template: '{{testVal}}',
scope: {
testVal: '<'
}
};
}

CodePen demo

或者如果你想按照你的方式去做,你只需要为指令元素添加一个类,即。 directive-block然后将动画设置为指令元素本身,如下所示:

HTML:

<animation-test class="directive-block" ng-repeat="val in testValues" test-val="val"></animation-test>

CSS:

.directive-block {
display: block;
animation: 0.5s slideInUp;
}

.directive-block.ng-leave-active {
animation: 0.5s slideOutDown;
}

CodePen demo

关于css - ngAnimate - 动画不会在重复的自定义指令上触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39223637/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com