更新 fiddle :http://jsfiddle.net/zQLQV/
我正在编写这个脚本来制作内容旋转器。首先,我让所有幻灯片获取它们的默认高度,然后将它们设置为 0 高度。在触发单击时(使用带幻灯片 ID 的 href),所有打开的幻灯片将变为高度 0,并且触发的幻灯片将动画到自动高度。
一切都按计划进行,不包括自动高度。所有幻灯片都保持在 0 高度,无论其中的内容量如何。唯一能见度是 850 的最小高度。
任何帮助,将不胜感激。
$(function() {
$(".slide").each(function() {
slideHeight = $(this).height();
});
$(".slide").css({ "height": "0", "opacity": "0"});
$(".side-nav ul li a").click(function(event) {
event.preventDefault();
currentHref = $(this).attr('href');
$(".slide").stop().animate({"opacity": "0", "height": "0px", "min-height": "0px"}, 100);
$(currentHref).stop().animate({"opacity":"1", "min-height": "850px", height: slideHeight + "px"}, 450);
});
});
最佳答案
我相信你的问题在这里:
$(".slide").each(function() {
slideHeight = $(this).height();
});
发生了什么是你的
slideHeight
变量只是被设置为最后一张幻灯片的高度。如果您将最短的幻灯片移到列表中的最后一个位置,您会看到其他幻灯片的内容被截断。我有 updated your fiddle将每张幻灯片的高度存储在幻灯片本身的数据属性中。
HTML:
<div class="side-nav">
<ul>
<li><a href="#one-slide">1</a></li>
<li><a href="#two-slide">2</a></li>
<li><a href="#three-slide">3</a></li>
</ul>
</div>
<div class="slide" id="one-slide">asdf<br>asdf<br>asdf<br>asdf<br></div>
<div class="slide" id="two-slide">asdf<br>asdf<br>asdf<br></div>
<div class="slide" id="three-slide">asdf<br>asdfasdf<br>asdfasdf<br>asdfasdf<br>asdfasdf<br>asdfasdf<br>asdfasdf<br>asdfasdf<br>asdf<br></div>
Javascript:
$(function() {
$(".slide").each(function() {
$(this).data('slideHeight', $(this).height());
});
$(".slide").css({ "height": "0", "opacity": "0"});
$(".side-nav ul li a").click(function(event) {
event.preventDefault();
var targetContainer = $($(this).attr('href'));
currentHref = $(this).attr('href');
$(".slide").stop().animate({"opacity": "0", "height": "0px"}, 100);
targetContainer.stop().animate({"opacity":"1", height: targetContainer.data('slideHeight') + "px"}, 450);
});
});
关于jquery动画到自动高度不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12606791/