javascript - ngIf 和 ngAnimate - 动画期间重复的 HTML 内容

标签 javascript angularjs animation

我尝试制作简单的 Angular 动画。但是我有一个问题,当我快速点击按钮时(在动画完成之前),内容容器在我点击时创建了很多次...

如何防止这种情况发生?我想在单击后停止动画,然后在同一对象而不是新对象上开始动画?

JSFIDDLE

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;
 }

编辑:

我确实更改了代码以使用 ngRoutesngView 而不是 ngIfngAnimate 的行为是相同的. 我认为这可能是 Angular 中的一个错误,因为在控制台中我有错误 undefined in not a function in angular-animate.js at line 1348 which contains 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,但这不是我很高兴的解决方案...

最佳答案

您可以使用 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>

你的代码

$scope.front = false;

关于javascript - ngIf 和 ngAnimate - 动画期间重复的 HTML 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27756515/

相关文章:

android - 确定动画后 ImageView 共享元素的最终大小

javascript - three.js 动画基本骨架

javascript - 不变违规 : Text strings must be rendered within a <Text> component

javascript - 获取 [object Object] 如何打印每个值

html - 尝试在 html 模板中显示 GIF 时引发错误

angularjs - ng-app 是否等待 document.ready?

javascript - CSS动画在父元素上向上滑动子元素

javascript - 等待 Angular 完成更新 DOM

javascript - 如何拦截对象的属性枚举?

javascript - Vuex 提交 : JSON circular structure error