动画滑动div反弹而不是平滑地出现/消失

时间:2015-06-03 11:05:48

标签: javascript html css angularjs angularjs-animation

我的应用中有一个导航栏和一个子导航栏。在子栏中,可以按下按钮,我希望此按钮打开一个新的子栏,它将隐藏原始栏。

新的子栏应该从主栏后面滑动并隐藏第二个栏。

问题是:

  1. 当第三个栏出现时,它会反弹而不是显得顺利
  2. 当第三个柱子消失时,它会消失,并且不会像我期望的那样向后滑动
  3. 我尝试使用top属性认为它可以解决问题,但事实并非如此。

    我在这里附上了片段。或者您可以在 jsfiddle

    中查看

    angular.module('myapp.controllers', []);
    
    var app = angular.module('myapp', ['myapp.controllers', 'ngAnimate', ]);
    
    angular.module('myapp.controllers').controller("BarController", function ($scope) {
        $scope.showActionsBar = false;
    
        $scope.cancelAction = function () {
            $scope.showActionsBar = false;
        }
    
        $scope.click = function () {
            $scope.showActionsBar = true;
        }
    });
    .navbar-deploy {
        background-color: red;
        border: solid transparent;
    }
    
    .third, .sub-navbar-fixed {
        background-color: black;
        width: 100%;
        height:60px;
        padding-top: 18px;
        margin-bottom: 0px;
        z-index: 1000;
        color: white;
    }
    
    .actions-bar {
        top: 40px;
        background-color: yellow;
        position: fixed;
        padding-left: 0px;
        z-index: 1001;
    }
    
    .sub-bar {
        padding-top: 40px;
    }
    
    .third-in, .third-out {
        -webkit-transition:all ease-out 0.3s;
        -moz-transition:all ease-out 0.3s;
        -ms-transition:all ease-out 0.3s;
        -o-transition:all ease-out 0.3s;
        transition:all ease-out 0.3s;
        -webkit-backface-visibility: hidden;
    }
    
    .third-in.myhidden-remove, .third-out.myhidden-add.myhidden-add-active {
        display: block !important;
        top: -2000px;
        z-index: 0;
    }
    
    .third-out.myhidden-add, .third-in.myhidden-remove.myhidden-remove-active {
        display: block !important;
        top: -80px;
        z-index: 1001;
    }
    
    .myhidden {
        visibility: hidden;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular.min.js"></script>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet"/>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet"/>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.12.1/ui-bootstrap-tpls.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular-animate.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui/0.4.0/angular-ui.min.js"></script>
    <div ng-app="myapp">
        <div ng-controller="BarController">
            <div class="navbar-deploy navbar navbar-default navbar-fixed-top">
                <div class="container-fluid">
                    <div class="col-lg-2">First Toolbar</div>
                </div>
            </div>
            <div class="sub-bar">
                <div class="sub-navbar-fixed" ng-cloak>
                    <div class="container-fluid">
                        <span>
                            <a ng-click="click()"><span> Second Toolbar</span>
                            </a>
                            <div class="actions-bar third third-in third-out" ng-cloak ng-class="{'myhidden': !showActionsBar}">
                                <div class="container-fluid form-group"> <span class="col-lg-10">
                                <div class="col-lg-2 col-lg-offset-1">
                                        <a ng-click="cancelAction()">Back</a>
                                </div>
                        </span>
    
                            </div>
                        </div>
                        </span>
                    </div>
                </div>
            </div>
        </div>
    </div>

3 个答案:

答案 0 :(得分:2)

说实话..我知道为什么&#34;反弹&#34;。您的黄色容器放置在visibility:hidden)的最终位置(可见时)。当您开始动画时,菜单首先转到顶部(动画的原点)然后向下。

要修复它,你可能会在黑色菜单下看不到时将黄色容器定位但是...... Imho你的html非常混乱(我不是指任何冒犯)因为你的容器放在一个{ {1}}包含buttom,它是红色菜单中的孩子......并且改变所有这些可能会弄乱一切。

但是你的菜单效果很容易从头开始,只有非常简单的css,html和jquery。如果您要更改代码,这就是我可以帮助您的方法。

使用此html(设置元素的顺序以避免使用span

z-index

这个css:

<div class="header">
    <div class="header-bot">
        <span class="show">second toolbar</span>
    </div>
    <div class="header-extra">
        <span class="hide">back</span>   
    </div>
    <div class="header-top">
        <span>first toolbar</span>
    </div>
</div>

只是这个jquery(在点击buttoms时添加或删除一个类):

body {margin:0;padding:0;}
span {color:#fff;}
.header {
    width:100%;
    position:fixed;
    top:0;
}
.header-top {
    background-color:black;
    height:50px;
    position:absolute;
    top:0px;
    width:100%;
}
.header-bot {
    background-color:red;
    height:50px;
    position:absolute;
    top:50px;
    width:100%;
}
.header-extra {
    background-color:yellow;
    height:50px;
    position:absolute;
    top:0;
    width:100%;
    transition: all 0.3s ease;
}
.down {
    top:50px;
}
.hide {color:#000;}

你可能有什么类似于你想要的东西。希望这无论如何都可以帮助。

<强> FIDDLE

答案 1 :(得分:2)

试试这个:

.myhidden{ top:-2000px; }

答案 2 :(得分:0)

只需从div元素中删除第三个和第三个类,它就会停止弹跳效果。

<div class="actions-bar third " ng-cloak ng-class="{'myhidden': !showActionsBar}">
                        <div class="container-fluid form-group"> <span class="col-lg-10">
                        <div class="col-lg-2 col-lg-offset-1">
                                <a ng-click="cancelAction()">Back</a>
                        </div>
                </span>

                    </div>
                </div>