jQuery:根据内容大小调整大小的动画容器

jQuery: Animated container that resizes based on content size

我在这里尝试创建一个动画 div 容器,它会根据内容大小和动画调整自身大小。问题是无法轻松计算大小,这使得很难使用常见的建议。

我在下面的 link 上重现了整个问题,我正在寻找找到解决方案的提示。

https://jsfiddle.net/csj78rgo/2/

我首选的解决方法是 jQuery、jQuery-ui 或 Bootstrap JS。

HTML:

<div class="container">
    <div id="part1">
        <h3>TITLE</h3>
        <p>Some content</p>
        <p>Some content</p>
    </div>
    <div id="part2">
        <p>Some content</p>
    </div>
    <div id="part3">
        <p>Some content</p>
        <p>Some content</p>
    </div>
</div>

JS:

step = 0;
if (step==0) {
    $('#part1').show();
    $('#part2').hide();
    $('#part3').hide();
}  else if (step==1) {
    $('#part1').hide();
    $('#part2').show();
    $('#part3').hide();
} else if (step==2) {
    $('#part1').hide();
    $('#part2').hide();
    $('#part3').show();
}

CSS:

.container {
    border: 1px black solid
}

我会说使用类似于下面的逻辑;替换“$('#part1').show();”逻辑。

$('#part1').show();
var containerHeight = $('#part1').height();
$('#part1').hide();

$('#part2').hide();
$('#part3').hide();

$('.container').animate({height: containerHeight + "px"}, 400, "linear", function() {
    $('#part1').fadeIn(100);
});

前 3 行是为了解决 FireFox 独有的错误,它不会检测元素的高度,除非它是可见的。通过显示它,获取高度,然后隐藏它..它发生得太快了,它不会在浏览器上显示,但你可以获得动画的高度。

动画有一个回调函数,它只会在容器调整到足以显示新元素的大小后才显示它。

它需要一些调整才能完全按照您的要求进行调整,但应该有足够的内容让您理解。

您不需要做任何花哨的事情来调整容器的大小,一旦您将内容隐藏在其中,它就会自动调整自己的大小。您可以使用 jQuery 的 .show() and .hide()duration 参数来动画内容的进出。

var step = 0;
setInterval(function() {
  if (step==0) {
    $('#part1').show("slow");
    $('#part2').hide("slow");
    $('#part3').hide("slow");
  }  else if (step==1) {
    $('#part1').hide("slow");
    $('#part2').show("slow");
    $('#part3').hide("slow");
  } else if (step==2) {
    $('#part1').hide("slow");
    $('#part2').hide("slow");
    $('#part3').show("slow");
  }

  if(step++ == 3)
    step = 0;
}, 1000);
.container {
  border: 1px black solid
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="container">
  <div id="part1">
    <h3>TITLE</h3>
    <p>Some content</p>
    <p>Some content</p>
  </div>
  <div id="part2">
    <p>Some content</p>
  </div>
  <div id="part3">
    <p>Some content</p>
    <p>Some content</p>
  </div>
</div>