在jQuery效果之前确定元素包装器的最终大小(例如slideDown)

时间:2011-10-12 01:23:56

标签: javascript jquery

有人能告诉我jQuery是否(和如何)确定使用slideDown()等内置效果函数动画的元素的最终大小?

举一个实际的例子http://jsfiddle.net/GgCLa/

CSS:

#wrapper { display: block; }

#wrapper p {
     display: none;   
}

#wrapper p:first-child {
     display: block;   
}

HTML:

<div id="wrapper">
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
       Curabitur et quam urna, ultrices commodo odio.</p>
    <p>Nulla at tellus augue, varius dignissim nunc. Donec mattis
       est quis sem iaculis scelerisque. .</p>
</div>
<input type="button" name="button" id="button" value="Clickey" />

JAVASCRIPT:

$(document).ready(function() {
    $("input").toggle(
        function() { $("#wrapper p:last").slideDown("fast"); },
        function() { $("#wrapper p:last").slideUp("fast"); }
    );
});

有没有办法在动画完成之前确定包装器的最终高度?

2 个答案:

答案 0 :(得分:2)

解决了安东尼杰克的帮助问题。要在触发动画之前获取包装器的最终大小,包装器中包含的所有元素的高度需要总结如下:

var calcHgt=0;
$("#wrapper *").each(function() {
   calcHgt+=$(this).height();
});

更新了小提琴:http://jsfiddle.net/GgCLa/4/

答案 1 :(得分:1)

.outerHeight().height()似乎都会返回fiddle中元素的高度,即使该元素当前是隐藏的。