我正在使用ngAnimate
为ng-repeat
中的条目制作动画。加载数据时,我在css中定义的所有元素都是动画的:
.chat-message.notice.ng-enter {
-webkit-animation: rubberBand 1s;
-moz-animation: rubberBand 1s;
-ms-animation: rubberBand 1s;
animation: rubberBand 1s;
}
当通知附加以下html时,这是有效的:
<ul>
<li class="media chat-message pointer fade-animate"
ng-repeat-start="message in guestbook.messages track by $index"
ng-if="!message.bot">
<!-- more html -->
</li>
<li class="chat-message notice" ng-repeat-end ng-if="message.bot">
<div>
<p class="text-center">
{{ message.message }}
<small>({{ message.date | amTimeAgo }})</small>
<span class="close pull-right" ng-click="guestbook.remove(message)">×</span>
</p>
</div>
</li>
</ul>
但是,当附加新消息(在顶部)时,每个元素再次被动画化。有没有一种元素只有一次动画?当一条新消息附加到数组时,只有该元素才会生成动画?
修改
点击“新消息”后,我看到并非所有通知都是动画的。也许它与ng-repeat-start
和ng-repeat-end
?
答案 0 :(得分:2)
如果理解正确,只需更改:
$scope.messages.unshift(message);
到此:
$scope.messages.push(message);
答案 1 :(得分:1)
即使上面的答案修复了问题,我的解决方案在其他情况下可能会有所帮助。修复非常简单。
使用Angular varible $ first ,只需在HTML中使用ng-class指令为第一个元素添加CSS类。在这个例子中,class&#34; first&#34;将仅添加到ng-repeat中的第一个元素:
ng-class="{'first': $first===true}"
然后将动画规则应用于&#34;第一个&#34; CSS类
.chat-message.notice.first.ng-enter {
color:red !important;
font-weight:bold;
animation: rubberBand 1s;
}
更新了JSFIDDLE: http://jsfiddle.net/t6x3a1zj/7/