动画 jQuery 高度百分比

Posted

技术标签:

【中文标题】动画 jQuery 高度百分比【英文标题】:Animate jQuery height percentage 【发布时间】:2012-08-01 07:12:28 【问题描述】:

当我尝试为百分比设置动画时,它不是动画,而是立即扩展到整个高度。我希望它扩展到 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 似乎无法识别它。我该如何解决这个问题?

【问题讨论】:

尝试将height: "100%" 更改为height: $(this).parent().height()。 jQuery 很难比较百分比和像素,所以你应该以像素为单位进行计算。 【参考方案1】:

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

所以如果你想让这成为可能,你想添加 div 父节点并设置父节点的高度,我在 jsFiddle 中举了一个例子

【讨论】:

啊啊啊。不适用于 jQuery v1.11。应用切换的方式不同【参考方案2】:

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

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

【讨论】:

【参考方案3】:

我很确定这是不合法的。您不能混合使用 px 和 percent - 它无法在它们之间进行转换。

【讨论】:

谢谢cpt。明显的。我很确定 SA 是问答 - 我错过了答案。【参考方案4】:

我想到了两种方法。

第一种方式是你的方式,我在这里发现一个逗号, 错误:并且需要使用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);
    );
);​

【讨论】:

【参考方案5】:

我已经找到了解决这个问题的方法(抱歉迟到了)。您需要做的是在 #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)。

【讨论】:

以上是关于动画 jQuery 高度百分比的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 动画和属性值的百分比

CSS 根据 jQuery 的宽度百分比设置高度

jquery如何获得宽度为百分比的元素的宽度?

开发小技巧用HTML和CSS在文本上创建液体填充动画效果

如何让 JQuery 在旋转动画的循环内等待

不定高元素的高度transition动画实现