【问题标题】:div not showing during animation using nganimate使用 nganimate 在动画期间未显示 div
【发布时间】:2015-11-03 16:54:47
【问题描述】:

我正在尝试让我的 div2 显示类似于 SlideUp-Click to Toggle button here

我的code 显示它不起作用。 “打开第二个 div”和“隐藏此 div”按钮用于显示/隐藏第二个 div。显示/隐藏确实有效,但动画无效。请帮忙。

    var myElement = angular.element( document.querySelector('#div2') );
    myElement.addClass('ng-hide');

    $scope.openSecondDiv = function() {
        var myElement = angular.element( document.querySelector('#div2') );
        myElement.removeClass('ng-hide');
    }
    $scope.hideSecondDiv = function() {
        var myElement = angular.element( document.querySelector('#div2') );
        myElement.addClass('ng-hide');
    }

【问题讨论】:

    标签: angularjs ng-animate


    【解决方案1】:

    不用所有的控制器逻辑,直接用ng-show作为属性怎么样:

    <div class="row teal" id="div1">
        <button class="btn" ng-click="showDiv2 = !showDiv2">Open second div</button>
    </div>
    
    <div style="background: orange;" class="row cssSlideUp" ng-show='showDiv2'>
        <button class="btn" ng-click="showDiv2 = false">Hide this div</button>
    </div>
    

    对于 ng-clicks,第一个是切换示例,另一个强制它为 false。

    【讨论】:

    • 你能帮我弄清楚为什么我的代码不工作吗?我也想明白这一点。
    【解决方案2】:

    这是因为您正在尝试转换到 height: 0,这是您无法做到的。

    height 更改为 max-height 可以解决您的代码问题,如更新的 plunkr 中所示:http://plnkr.co/edit/O4rT2bSsr3KnufQMYuhx?p=preview

    但正如其他人所说,您不应该这样做。您应该只使用 Angular 而不是 .addClass 切换类。

    【讨论】:

    • 非常感谢。根据您的建议,我将代码更改为使用表达式为 ng-hide 设置动画,这比我之前使用的 jquery 方法更优雅。 plnkr.co/edit/QY1VQVqHPZZOOi9qyl6f?p=preview你能帮我理解为什么我们必须将高度更改为最大高度。我试图谷歌但无法弄清楚
    • @Tarun 除了浏览器不支持过渡到高度为 0 或自动之外,我实际上并不知道真正的答案。认为这与浏览器需要实际值来计算中间动画有关。
    【解决方案3】:

    您不必为此做如此复杂的事情。我已经使用简单的 css 转换和 ng-class 实现了。

    您可以查看this plunker

    我的css 实现:

    div {
        white-space: pre;
        background: #eee;
        color: #333;
        overflow:hidden;
        height:0;
        opacity:0;
        transition:height 1s, opacity 1s;
        -moz-transition:height 1s opacity 1s;
        -webkit-transition:height 1s opacity 1s;
        -o-transition:height 1s opacity 1s;
        -ms-transition:height 1s opacity 1s;
    }
    .changed {
        height:200px;
        opacity: 1;
    }
    

    我的html 实现

    <button class="btn" ng-click="hideSecondDiv()">Hide this div</button>
    <div ng-class="{changed:clicked === true}" id="div2">
    
    </div>
    

    希望这对你有用。

    【讨论】:

    • 你能帮我弄清楚为什么我的代码不工作吗?我也想理解这一点。感谢您分享您的 plunker
    • 我只想说你的方法不好,即使它可以达到你想要的效果。基于 id 的 dom 操作,通过 jquery 方法添加/删除类不是一个好方法,当您可以以更清洁和更有效的方式以角度方式实现相同的事情时。
    • 似乎我们都不知道为什么我的代码不起作用。我会试着弄清楚。
    猜你喜欢
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多