2013-03-13 130 views
3

有谁知道为什么这个动画罚款:Javascript/jQuery的动态高度动画?

function setContainerHeight() { 
    $(".pagecontainer").animate({ 
     height: '700px' 
    }, 500); 
} 

即一个固定的高度,但这并不动画呢?

function setContainerHeight() { 
    $(".pagecontainer").animate({ 
     height: 'auto' 
    }, 500); 
} 

它仍然调整为自动,但没有动画,只是捕捉它。

我的代码:

JS:

<script> 

    function setContainerHeight() { 
     $(".pagecontainer").animate({ 
      height: 'auto' 
     }, 500); 
    } 

    $('.link').on('click', function(e){ 
     $('.pagecontainer>div').fadeOut(0); 
     setContainerHeight(); 
     $(this.getAttribute("href")).fadeIn(); 
    }); 

</script> 

CSS:

.pagecontainer { 
min-height:450px; 
width:80%; 
min-width:800px; 
padding:50px 0; 
margin: 0 auto; 
} 
.pagecontainer>div{ 
display: none; /*wait until page needs to be faded in*/ 
padding-left:50px; 
padding-right:50px; 
position:relative; 
} 

HTML:

<div class="pagecontainer"> 

    <a href="#page1" class="link">page 1</a> 
    <a href="#page2" class="link">page 2</a> 
    <a href="#page3" class="link">page 3</a> 

    <div id="page1">TONS OF TEXT HERE</div> 

    <div id="page2">A BIT OF TEXT HERE</div> 

    <div id="page3">BUNCH OF IMAGES</div> 

</div> 

有不同的div /输出,每个需要一个衰落不同的高度。页面的宽度也是动态的,但不需要动画,只是用视口拉伸/缩小。

谢谢。

+2

没有读jQuery代码,我猜动画不会知道它的最终高度。修复是找到它然后动画给它的整数。 – Popnoodles 2013-03-13 18:43:27

+0

添加了JS/CSS/HTML。 – Windbrand 2013-03-13 19:54:25

回答

2

从经验来看,我有这个相同的问题,但你不能动画到auto。但是,您可以事先获得容器高度,然后制作该容器的高度。例如。

function setContainerHeight() { 
    newHeight = $('.pagecontainer').height(); 
    $(".pagecontainer").animate({ 
     height: newHeight 
    }, 500); 
} 
+0

这不会改变任何东西。 – Popnoodles 2013-03-13 18:45:16

+0

@popnoodles啊是的,你是对的,它不,谢谢你的经验教训。 – dev 2013-03-13 19:22:49

7

DEMO http://jsfiddle.net/zbB3Q/

动画不知道结局的高度。您需要获取它然后生成动画,但要做到这一点,您必须快速设置高度并返回到动画之前的状态。

function setContainerHeight() { 
    var heightnow=$(".pagecontainer").height(); 
    var heightfull=$(".pagecontainer").css({height:'auto'}).height(); 

    $(".pagecontainer").css({height:heightnow}).animate({ 
     height: heightfull 
    }, 500); 
} 
+0

当'var heightfull = $(“。pagecontainer”).css({height:'auto'})。height();'是否被读取时,这不会触发FOUC(非风格内容的闪烁) – Bill 2013-03-13 18:46:39

+1

不,它太快了,这不像js在浏览器显示一些内容之后等待body.onload。 – Popnoodles 2013-03-13 18:46:57

+0

我编辑了我的问题以包含我的JS/CSS/HTML。 .pagecontainer是整个容器,里面有几个div页面。页面改变,因此.pagecontainer应该改变高度以反映它。我尝试了'var targetpage = $(this).attr(“href”);'然后得到targetpage的高度,但它似乎不起作用。 – Windbrand 2013-03-13 19:39:59

0

这里的晚会有点晚,但我在我的一些代码中遇到了完全相同的问题。我写了一个小小的jQuery插件来解决这个问题 - 如果你仍然需要这个问题的解决方案,可用here