我有一个简单的AngularJS项目,带有一个指令,我希望在另一个完成时启动一个CSS动画 - 希望我制作一个sende,我在这里有一个jsfiddle示例,动画同时运行 - 我希望第一张“卡片”动画在下一次开始之前停止 - 怎么可以做到?
<div ng-app="flip" ng-controller="flipCtrl">
<div class="card card1 draw" my-show="">test1</div>
<div class="card card2 draw" my-show="">test2</div>
</div>
app.directive("myShow", function(){
return {
scope:{
param: "&myShow"
},
link: function( scope, element, attrs ){
element.on('click', function() {
if(element.hasClass('draw')) {
element.removeClass('draw');
}else{
element.addClass('draw');
}
});
}
}
});
答案 0 :(得分:5)
首先,重要的是要记住要包含您正在使用的AngularJS版本。但是,我将提供 1.2 和 1.3 + 解决方案。如果您使用的是小于1.2的版本,则确实考虑升级。
$ animate服务提供了一个 addClass 方法和一个 removeClass 方法,可以轻松地处理您需要的内容。行为会根据您使用的AngularJS版本而更改。
无论哪种方式,您首先要包含animate模块(它与angular.js主文件分开),然后在您需要的地方注入$animate
服务。
app.directive("myShow", [
'$animate',
function($animate) {
return {
// your directive config
};
}
]);
$animate (v1.2.26)服务的addClass和removeClass方法有三个参数:element,className和doneCallback。在这里,您可以使用 doneCallback 函数参数来判断动画何时完成。例如:
$animate.addClass(element, 'draw', function() {
// if we are in here, the animation is complete
});
使用AngularJS 1.3时,$ animate服务上的每个动画方法在调用时都会返回一个promise。一旦动画自动完成,已取消或由于动画被禁用而被跳过,则承诺本身将被解析。 (请注意,即使动画被取消,它仍然会调用动画的解析功能。)See Documentation
使用1.3及更高版本,您需要通过addClass
服务调用removeClass
或$animate
来使用承诺。您可以通过在最后链接then
函数来实现。例如:
$animate.addClass(element, 'draw').then(function() {
// if we are in here, the animation is complete
});
如果您使用的是AngularJS 1.3 RC (本文最新的不稳定版),并且您不熟悉承诺,请参考$q服务。