Bootstrap - div over div slideup

时间:2015-07-30 09:55:54

标签: jquery css twitter-bootstrap jquery-animate

我无法理解这一点:我正在创建一个带引导程序的移动webapp。所以我所拥有的是一个带有导航栏的容器,一些div和下面的一个药丸导航:

<div class="container">
<!-- top navbar -->
    <nav class="navbar navbar-default navbar-fixed-top">
    <!-- ... -->
    </nav>

    <div class="tab-content">

        <div role="tabpanel" class="tab-pane active fade in" id="map-panel">
            <div id="map"></div>


            <div class="container-fluid" id="teaser-container">
                <div class="row" id="teaser-slideup-button">
                    <div class="col-xs-12">
                        <a role="button" href="#teaser-content">
                            <i class="fa fa-chevron-up"></i>
                        </a>
                    </div>
                </div>
                <div class="row" id="teaser-header">
                    <div class="col-xs-12">Teaser header</div>
                </div>

                <div id="teaser-content">
                    <div class="row">
                        <div class="col-xs-12">
                            <div style="height: 160px" />
                        </div>
                    </div>
                </div>
            </div>            
        </div>
    </div>

    <nav class="navbar navbar-default navbar-fixed-bottom">
        <!-- ... -->
    </nav>

</div>

我想要做的是让#teaser-container从下面滑过#map。基本上

$('#teaser-slideup-button').on('click', function (e) {

     $('#teaser-container').animate({
            'bottom': '0px'
     });

});

一些相关的CSS:

#teaser-container {
    z-index:1000; 
    position: absolute;
    bottom: -100px;
    background: #fff;
    width: 100%;
    display: inline-block;
    overflow-y: hidden;
}

#map-panel {
    position: absolute;
    top: 0px;
    overflow-y: hidden;
    height: 100%;
    width: 100%;
}

然而,会发生的是,div只是出现,看起来动画发生之后,向上滚动地图div。我在这里创建了一个JSFiddle:

https://jsfiddle.net/jrubisch/hvpjrwrq/

我想这应该不会那么难,但我在这里有点困惑......如果需要,我很乐意提供更多细节。

谢谢!

2 个答案:

答案 0 :(得分:0)

这可能有所帮助,看起来似乎以类似的方式运作但使用按钮和手风琴。

&#13;
&#13;
var map;

function initialize() {
  map = new google.maps.Map(document.getElementById('map-canvas'), {
    zoom: 8,
    center: {
      lat: -34.397,
      lng: 150.644
    }
  });
}

google.maps.event.addDomListener(window, 'load', initialize);

$('.collapse').on('shown.bs.collapse', function() {
  $(this).parent().find(".fa-chevron-up").removeClass("fa-chevron-up").addClass("fa-chevron-down");
}).on('hidden.bs.collapse', function() {
  $(this).parent().find(".fa-chevron-down").removeClass("fa-chevron-down").addClass("fa-chevron-up");
});
&#13;
html,
body,
#map-canvas {
  height: 100%;
  margin: 0;
  padding: 0;
}
.navbar {
  margin-bottom: 0 !important;
}
.navbar-fixed-bottom .col-md-6 {
  padding: 0;
  border: none;
}
.navbar-fixed-bottom .btn {
  width: 100%;
  height: 50px;
  border-radius: 0;
  margin: 0;
  border: none;
  padding-top: 15px;
}
.navbar-fixed-bottom .panel-group,
.navbar-fixed-bottom .panel-heading {
  padding: 0;
  margin: 0;
  border: none;
  border-radius: 0;
}
&#13;
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script>
<nav class="navbar navbar-default">
  <div class="container-fluid">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"> <span class="sr-only">Toggle navigation</span>  <span class="icon-bar"></span>  <span class="icon-bar"></span>  <span class="icon-bar"></span> 
      </button>
      <a class="navbar-brand" href="#">Brand</a> 
    </div>

    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
      <ul class="nav navbar-nav">
        <li class="active"><a href="#">Link <span class="sr-only">(current)</span></a>
        </li>
        <li><a href="#">Link</a>
        </li>
        <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
          <ul class="dropdown-menu">
            <li><a href="#">Action</a>
            </li>
            <li><a href="#">Another action</a>
            </li>
            <li><a href="#">Something else here</a>
            </li>
            <li role="separator" class="divider"></li>
            <li><a href="#">Separated link</a>
            </li>
            <li role="separator" class="divider"></li>
            <li><a href="#">One more separated link</a>
            </li>
          </ul>
        </li>
      </ul>
    </div>
    <!-- /.navbar-collapse -->
  </div>
</nav>
<div id="map-canvas"></div>
<div class="navbar navbar-default navbar-fixed-bottom">
  <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true">
    <div class="panel panel-default">
      <div class="panel-heading" role="tab" id="headingOne">
        <div class="btn btn-warning" id="lowerOpen" type="button" data-toggle="collapse" data-target="#collapseOne" aria-expanded="false" aria-controls="collapseOne"> <i class="fa fa-chevron-up"></i> 
        </div>
      </div>
      <div id="collapseOne" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingOne">
        <div class="panel-body">Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua
          put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table,
          raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS.</div>
      </div>
    </div>
  </div>
  <div class="col-md-6">
    <div class="btn btn-primary"><i class="fa fa-map-marker"></i> Some</div>
  </div>
  <div class="col-md-6">
    <div class="btn btn-default"><i class="fa fa-sliders"></i> Controls</div>
  </div>
</div>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

我通过重新分组标记来解决它:

<div class="container-fluid" id="teaser-container">

    <div class="teaser-inner">
        <div class="row" id="teaser-slideup-button">
            <div class="col-xs-12">
                <a role="button" href="#">
                    <i class="fa fa-chevron-up"></i>
                </a>
            </div>
        </div>
        <div class="row" id="teaser-header">
            <div class="col-xs-12">Teaser Header</div>
        </div>

        <div class="row" id="teaser-content">
            <div class="col-xs-12">
                <div style="height: 160px" />
            </div>
        </div>
    </div>
</div>

在父级上使用position:relative,在子级上使用position:absolute

#map-panel {
    height: 100%;
    width: 100%;
    position: relative;
}
#teaser-container {
    z-index:1000; 
    position:absolute; 
    bottom: 20px;
    background: #fff;
    width: 100%;
    height:40px;
    overflow: hidden;     
}

并设置height属性的动画(基本上是$ .slideUp所做的)

$('#teaser-container').animate({
    'height': '260px'
}, 500);

如果有人知道更优雅的解决方案,请告诉我