动画jQuery高度百分比

时间:2012-08-03 08:44:14

标签: javascript jquery animation jquery-animate

当我尝试动画百分比时,它不是动画,而是立即扩展到整个高度。我希望它扩展到100%,但顺利

CSS:

#block-views{
overflow:hidden;
height:20px;
}

HTML:

<div id="block-views">
    1<br/>
    2<br/>
    3<br/>
    4<br/>
    5<br/>
    6<br/>
    7<br/>
    8<br/>
    9<br/>
    10<br/>
</div>
<a href="#" class="loadmore">Load more</a>

Jquery代码:

$(function() {
    $( ".loadmore" ).toggle(
        function() {
            $( "#block-views" ).animate({
                height: "20px",
            }, 1000 );
        },
        function() {
            $( "#block-views" ).animate({
                height: "100%",
            }, 1000 );
        }

    );
});

当我点击加载更多时,它会立即扩展到100%,而不是平滑,但是当我第二次点击它时,它会将尺寸平滑地减小到20像素。我尝试在Chrome的检查器工具中观察扩展过程,我可以清楚地看到百分比正在顺利添加,但数字不是整数,Chrome似乎无法识别它。我该如何解决这个问题?

5 个答案:

答案 0 :(得分:1)

我认为CSS百分比值在父节点上。

所以如果你想使这成为可能你想要添加div父节点并设置父节点的高度,我在jsFiddle

中举例说明

答案 1 :(得分:0)

我建议来自JQuery论坛的这篇文章适合您的要求。

http://forum.jquery.com/topic/jquery-animate-with-a-percentage-placed-div

答案 2 :(得分:0)

我很确定这不合法。你不能混合px和百分比 - 它无法在它们之间进行转换。

答案 3 :(得分:0)

我想到两种方式。

第一种方式是你的方式,我在这里发现逗号,错误:并且需要使用position:aboslute; css属性。最后一件事改变你的主要响应函数顺序。

Here is working jsFiddle.

$(function() {
    $( ".loadmore" ).toggle(
        function() {
            $( "#block-views" ).stop().animate({
                height: "20px"//if you wont use another animate property; dont use comma here
            }, 1000 );
        },
        function() {
            $( "#block-views" ).stop().animate({
                height: "100%"
            }, 1000 );
        }

    );
});​

结构就像这样= .animate(properties [,duration] [,easing] [,complete])

多个动画功能应该是这样的:.animate({'height':'20px','width':'20px'},1000);

----------------------------------------------- -------------

第二种方式是我的方式,你可以为每次点击添加+ 20px高度:

Here is jsFiddle

$(function() {
    $( ".loadmore" ).click(function() {
        $("#block-views").animate({'height':'+=20px'},1000);
    });
});​

答案 4 :(得分:0)

我找到了解决这个问题的方法(抱歉迟到了)。你需要做的是在#block-views 元素中创建额外的包装器,它将具有实际的高度信息:

<div id="block-views"> //height is 20px now
 <div class="wrapper"> //has its full height in px
  1<br/>
  2<br/>
  3<br/>
  4<br/>
  5<br/>
  6<br/>
  7<br/>
  8<br/>
  9<br/>
  10<br/>
 </div>
</div>

现在在javascript中你可以将 .wrapper 高度传递给animate()函数:

$('#block-news').stop().animate({'height': $('#block-news .wrapper').height()}, 1000);

为我工作。对于切换,您可以添加新变量并存储初始高度(20px)。