jQuery SlideDown跳转到Bootstrap 3行

时间:2016-03-17 21:48:45

标签: javascript jquery css twitter-bootstrap slidedown

我正在尝试使用jquery使div滑下(动画可见)。动画不流畅,最后跳跃。

<div class="container">
  <div class="row">
    <ul class="items">
      <li class="item col-sm-4">as</li>
      <li class="item col-sm-4">sdf</li>
      <li class="item col-sm-4">sdf</li>
      <li class="item col-sm-4">as</li>
      <li class="item col-sm-4">sdf</li>
      <li class="item col-sm-4">sdf</li>
    </ul>
    <ul class="more-items">
      <li class="item col-sm-4">as</li>
      <li class="item col-sm-4">sdf</li>
      <li class="item col-sm-4">sdf</li>
    </ul>
  </div
  <div class="row">
    <a id="show-more-btn" class="show-more-items">
      <i class="glyphicon glyphicon-plus"></i>
      <span class="text">Vis flere</span>
    </a>
  </div>
</div>

这是一个众所周知的问题,是由于jquery不知道动画元素的高度造成的。所以我在文件“就绪”上创建了一个函数来计算隐藏之前滑动元素的高度。

$(document).ready(function() {

  $('.more-items').css('height',function(i,h){
    alert(h);  
    $(this).hide();
      return h;
  });

  $("#show-more-btn").on("click", function(e) {
    e.preventDefault();
    $(".more-items").slideDown();
  });

});

这很有效,但当元素位于BS3网格行内时,高度始终为0px ...

为什么这样,我怎样才能确保元素在BS网格内有高度?

我无法使用BS“collapse()”函数,因为我无法在我正在处理的网站上加载BS js文件。

示例 拖动窗口足够宽以查看3列。
https://jsfiddle.net/vn1z6z9L/

2 个答案:

答案 0 :(得分:1)

好的,我找到了解决方案!如果我把col-sm-12放在<ul>上它会得到一个高度。在隐藏.more-items列表之前我甚至不需要计算它: - )

更新了jsfiddle:https://jsfiddle.net/vn1z6z9L/3/

<div class="container">
  <div class="row">
    <ul class="items col-sm-12">
      <li class="item col-sm-4">asf</li>
      <li class="item col-sm-4">dd</li>
      <li class="item col-sm-4">ssddf</li>
      <li class="item col-sm-4">as</li>
      <li class="item col-sm-4">sdf</li>
      <li class="item col-sm-4">sdf</li>
      <li class="item col-sm-4">as</li>
      <li class="item col-sm-4">sdf</li>
      <li class="item col-sm-4">sdf</li>
    </ul>
    <ul class="more-items col-sm-12">
      <li class="item col-sm-4">as</li>
      <li class="item col-sm-4">sdf</li>
      <li class="item col-sm-4">sdf</li>
      <li class="item col-sm-4">as</li>
      <li class="item col-sm-4">sdf</li>
      <li class="item col-sm-4">sdf</li>
    </ul>
  </div>

答案 1 :(得分:-1)

我做了一些改变 https://jsfiddle.net/vn1z6z9L/2/

$(document).ready(function() {
 $("#show-more-btn").on("click", function(e) {
 e.preventDefault();
 $(".more-items").slideToggle();
});   

});

.more-items{
 display:none;
 }
  

slideToggle()方法在所选元素的slideUp()和slideDown()之间切换。

     

此方法检查所选元素的可见性。

     

如果隐藏了某个元素,则会运行slideDown()。如果是,则运行slideUp()   元素是可见的 - 这会创建一个切换效果。

     

因此,您不需要使用BS崩溃。