我尝试做简单的角度动画。但是我有一个问题,当我快速点击按钮时(在动画完成之前),我点击时会多次创建内容容器......
如何防止这种情况?我想在点击后停止动画,然后在不在新对象上的相同对象上开始动画?
HTML
<div ng-app="test">
<div class="container" ng-controller="TestController as tCtrl">
<div class="row">
<div class="col-xs-12">
<a class="btn btn-default" ng-click="tCtrl.tt = 1"> 1 </a>
<a class="btn btn-default" ng-click="tCtrl.tt = 2"> 2 </a>
</div>
</div>
<div class="row">
<div class="col-xs-12 animate-if" ng-if="tCtrl.tt === 1">Chosen = 1</div>
<div class="col-xs-12 animate-if" ng-if="tCtrl.tt === 2">Chosen = 2</div>
</div>
</div>
</div>
JS
var app = angular.module('test', ['ngAnimate']);
app.controller('TestController', function ($scope) {
this.tt = 1;
});
CSS
.animate-if.ng-enter, .animate-if.ng-leave {
-webkit-transition: opacity 5.2s ease-in-out;
-moz-transition: opacity 5.2s ease-in-out;
-ms-transition: opacity 5.2s ease-in-out;
transition: opacity 5.2s ease-in-out;
}
.animate-if.ng-enter,
.animate-if.ng-leave.ng-leave-active {
z-index: 0;
opacity: 0;
}
.animate-if.ng-leave,
.animate-if.ng-enter.ng-enter-active {
z-index: 1;
opacity: 1;
}
修改
我确实更改了代码以使用ngRoutes
和ngView
代替ngIf
,但ngAnimate
的行为是相同的。
我认为它在Angular中可能是一个错误,因为在控制台中我在第1348行的angular-animate.js中有错误undefined in not a function
,其中包含operation.cancel()
并且是以下内容的一部分:
forEach(animationsToCancel, function(operation) {
operation.cancel();
});
完全出现问题,当您点击左侧菜单“信息中心”和“用户”时,您可以看到 here 。
编辑2:
我现在正在使用的解决方案:
this.fn_change_view = function (str_view, $event) {
if (!this.contentStopAnim) {
this.contentStopAnim = true;
this.active_view = str_view;
$timeout(function () {
template.contentStopAnim = false;
}, 360);
} else {
$event.preventDefault();
}
};
我在动画完成之前阻止更改位置href,但这不是我很高兴的解决方案......
答案 0 :(得分:2)
您可以使用ng-show
和关键帧进行动画处理。这是plunker。
分配css事件。
.ng-hide-add {
animation:0.1s keyFrameLeave ease;
}
.ng-hide-remove {
animation:0.5s keyFrameEnter ease;
}
注册关键帧
@keyframes keyFrameEnter {
0% {
transform: translate(0,100px);
opacity: 0;
}
100% {
transform: translate(0,0);
opacity: 1;
}
}
@keyframes keyFrameLeave {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
您的HTML将如下所示:
<button ng-click="front = !front">click to animate</button>
<div ng-show="front">Displayed</div>
你的js
$scope.front = false;