14

我正在玩最近添加的 angular.js 动画功能,但这不能按预期工作

<style>
    .myDiv{
        width:400px;
        height:200px;
        background-color:red;
    }
    .fadeIn-setup,.fadeOut-setup {
      -webkit-transition: 1s linear opacity;
      -moz-transition: 1s linear opacity;
      -o-transition: 1s linear opacity;
      transition: 1s linear opacity;
    }
    .fadeIn-setup{
      opacity:0;
    }
    .fadeOut-setup{
      opacity:1;
    }
    .fadeIn-setup.fadeIn-start {
      opacity: 1;
    }
    .fadeOut-setup.fadeOut-start{
        opacity:0;
    }
</style>

<div ng-app>
    <div ng-controller='ctrl'>
       <input type='button' value='click' ng-click='clicked()' />  
       <div ng-show="foo == true"  class='myDiv' ng-animate="{show: 'fadeIn', hide:'fadeOut'}">
       </div>
     </div>
</div>

function ctrl($scope){
    $scope.foo = false;
    $scope.clicked = function(){
       $scope.foo = !($scope.foo);
    }
}

http://jsfiddle.net/Kx4TS/1

它破坏了 myDivdom.ready并开始淡出。而它最初应该被隐藏。如何解决?

4

4 回答 4

40

即使现在使用 1.2.22,这个问题仍然存在。但是,这些解决方案之一很容易解决它。

在尝试了这里提到的所有解决方案之后,我想特别强调 cocoggu 对 ac360 的建议,因为它是迄今为止最简洁的并且“有效”。

正如他所建议的,只需将 ng-hide 类添加到有问题的元素即可立即解决问题。- 它可以防止初始动画故障并允许所有后续动画按预期运行。

工作解决方案感谢 cocoggu

<div id="offending-element" class="ng-hide"></div>

于 2014-08-29T06:00:00.137 回答
10

我为您的问题找到了 2 种不同的解决方案

最简单的解决方案:在 div 中添加内联样式style="display:none"

另一种解决方案是使用ng-class="state"向 div 添加一个初始类, 并在单击按钮时重置该类

function ctrl($scope){
    $scope.state = 'hide';
    $scope.foo = false;
    $scope.clicked = function() {
       $scope.state = undefined;  
       $scope.foo = !($scope.foo);
    }
}

连同以下CSS:

.hide {
    display: none;
} 

我想我会使用第一个也是最简单的解决方案

于 2013-04-07T19:00:57.937 回答
0

这应该可以解决问题:

<div ng-class="ng-hide" ng-show="foo == true"  class='myDiv'">

这是这里的重要部分:ng-class="ng-hide"

编辑:正如评论中指出的那样,上述方法不起作用。它应该如下所示:

<div class="ng-hide" ng-show="foo == true"  class='myDiv'">
于 2015-03-30T12:31:53.907 回答
-1

现在已解决此问题。升级到 1.1.5。

于 2013-05-27T02:29:49.053 回答