jQuery在更改CSS高度属性时添加动画

Posted

技术标签:

【中文标题】jQuery在更改CSS高度属性时添加动画【英文标题】:jQuery add animation when change CSS height property 【发布时间】:2013-06-11 13:25:35 【问题描述】:

希望大家过得愉快

我想为那段代码添加动画。我尝试使用 animate() 。但是没有用,可能是因为我对javascript缺乏了解。

请告诉我是否可以使用此代码,或者我需要尝试其他方法吗?你有什么建议?

非常感谢您。

这是 html 代码:

<div id="description_wrapper">
    Text content.<br/>
    See; More Text content.
</div>

<button class="learn_more" id="lm_more" href="#">Learn more</button>

CSS

#description_wrapper

    margin: 0 auto;
    margin-top: 25px;
    height: 0;
    overflow: hidden;

jQuery

$('#lm_more').click(function(event)
    event.preventDefault();
    if($('#description_wrapper').css('height') > '1px') 
        $('#description_wrapper').css('height': '0px');
        $('#lm_more').html('Learn More');
    
    else
    
        $('#description_wrapper').css('height': 'auto');
        $('#lm_more').html('Learn less');
    
);

在此处查看代码http://jsfiddle.net/Gbspx/11/

【问题讨论】:

jQuery 只对实际数字进行动画处理,它不理解“自动”,如果这是你尝试的动画? 如果您要设置动画效果,可以使用 CSS3 转换来自动设置动画 jsfiddle.net/Gbspx/16 【参考方案1】:

您可以使用一些 CSS3 过渡来非常轻松流畅地完成此操作。用这个切换你当前的 CSS:

#description_wrapper

margin-top: 25px;
height: 0;
overflow: hidden;
-webkit-transition: all .8s ease;
-moz-transition: all .8s ease;
-ms-transition: all .8s ease;
-o-transition: all .8s ease;
transition: all .8s ease;

此外,您需要为高度指定一个指定的高度而不是“自动”才能使过渡生效。

$('#lm_more').click(function(event)
event.preventDefault();
if($('#description_wrapper').css('height') > '1px') 
    $('#description_wrapper').css('height': '0px');
    $('#lm_more').html('Learn More');

else 
    $('#description_wrapper').css('height': '200');
    $('#lm_more').html('Learn less');

);

JS Fiddle

请注意,这只适用于支持 CSS3 的浏览器。

【讨论】:

没错,我试过这个,但问题是我想要将高度设置为“自动”而不是具有特定高度。【参考方案2】:

看看.slideToggle(),我想这就是你要找的。​​p>

【讨论】:

没错!!兄弟,你真棒!【参考方案3】:

我找到了一个很好的解决方案,我仍然可以使用自动... 对我来说 auto 非常重要,尤其是当使用按钮使多个 div 出现时

解决办法是:

$('#lm_more').click(function(event)
    event.preventDefault();
    if($('#description_wrapper').css('height') != '0px') 
        $('#description_wrapper').animate('height': '0px', 1000, "easeInQuint");
        $('#lm_more').html('Learn More');
    
    else 
        var height_div = $('#description_wrapper').css('height': 'auto').height();
        $('#description_wrapper').animate('height': height_div, 1000, "easeInQuint");
        $('#lm_more').html('Learn less');
    
);

我首先让它计算所需的高度,然后将它传递给 animate 函数。

谢谢大家

【讨论】:

【参考方案4】:

这可以向上滑动,但就像第一个答案一样,您应该使用 slidetoggle。这是一个更好的选择。或者做addClass。

$('#lm_more').click(function(event)
    event.preventDefault();
    if($('#description_wrapper').css('height') > '1px') 
        $('#description_wrapper').animate(height : '0px', 1000);
        $('#lm_more').html('Learn More');
    
    else 
        $('#description_wrapper').animate(height : '100%',  1500);
        $('#lm_more').html('Learn less');
    
);

【讨论】:

【参考方案5】:

试试这个:

$('#lm_more').click(function (event) 
        event.preventDefault();
        $('#description_wrapper').slideToggle('slow', function ()
            if ($('#lm_more').text() == 'Learn more') 
                $('#lm_more').text('Learn less');
             else 
                $('#lm_more').text('Learn more');
            
        );
    );

【讨论】:

【参考方案6】:

我添加了很好的解决方案。在这里您可以找到内容的动态高度,然后在按钮单击和窗口调整大小事件上添加具有过渡效果的高度。

$(document).ready(function() 
            var divheight = document.getElementById('experience-county-toggle').offsetHeight;
            $("#experience-county-toggle").css('height', 0);
            $(".toggle-arrow-icon").click(function() 

                $(window).resize(function() 
                    $("#experience-county-toggle").removeClass('height-zero');
                    $("#experience-county-toggle").animate(
                        height: divheight
                    , 1);
                    var $heightfirst = $('#experience-county-toggle').height();
                    if ($heightfirst > 0) 
                        $("#experience-county-toggle").addClass('height-zero');

                    

                );
                $(window).trigger('resize');
            );

【讨论】:

以上是关于jQuery在更改CSS高度属性时添加动画的主要内容,如果未能解决你的问题,请参考以下文章

关于属性更改的 jQuery 动画

在 jQuery 中,如何为“最大高度”CSS 属性设置动画?

添加内容后如何平滑div高度变化

jQuery-4.动画篇---jQuery核心

将 css 添加到 jquery 'flux' 动画

jQuery - 动画高度自动