如何为内容块制作动画?

Posted

技术标签:

【中文标题】如何为内容块制作动画?【英文标题】:How to animate a block of content? 【发布时间】:2013-05-16 12:19:10 【问题描述】:

我正在使用 twitter-bootstrap 框架。

我正在尝试为页面的一部分设置动画。首先输入这个fiddle,在下面的代码之前我会解释这个想法。

HTML

<div id="bluecont" class="container">
    <div class="row">
        <div class="span8 offset2">
             <h1>Hello ***!</h1>
            <button id="clickhide">Show span</button>
        </div>
        <div id="spanhide" class="span8 offset2">
             <h2>Thanks for the help!</h2>
        </div>
    </div>
</div>
<div id="redcont" class="container">
    <div class="row">
        <div class="span8 offset2">
             <h3>This would be the rest content of the page</h3>
        </div>
    </div>
</div>

JS

$(document).ready(function () 
    $("#spanhide").hide();

    $("#clickhide").click(function () 
        var caption = $(this).text();

        if (caption == "Show span") 
            $("#spanhide").fadeIn("slow");
            $(this).text("Hide span");
         else 
            $("#spanhide").fadeOut("slow");
            $(this).text("Show span");
        
    );
);

CSS

.span8 
    background: green;
    padding: 20px

#bluecont 
    background:blue;
    padding: 20px

#spanhide 
    background: yellow;

#redcont 
    background: red;
    padding: 20px

#clickhide 
    width: 100%;


嗯,正如您在此处看到的,当我按下按钮时,我会显示一个隐藏的跨度。但是当它出现时,红色的容器直接下降。我正在尝试将它稍微移动一点,直到隐藏的跨度有空间出现。当我想隐藏它时也是如此。

可能正在使用 CSS 过渡?还是 jQuery 的 .animate() 函数?我不知道...我正在寻找最好的方法,所以任何帮助或建议都将不胜感激。

如果您需要更多信息,请告诉我,我会编辑帖子。

【问题讨论】:

【参考方案1】:

here is the code demo

$(document).ready(function () 
$("#spanhide").hide();

$("#clickhide").click(function () 
    var caption = $(this).text();

    if (caption == "Show span") 
        $("#spanhide").css(opacity:0).slideDown("slow").animate(opacity:1);
        $(this).text("Hide span");
     else 
        $("#spanhide").animate(opacity:0).slideUp("slow");
        $(this).text("Show span");
    
);

);

【讨论】:

你太棒了!而且也很优雅。谢谢罗希特! 我如何在动画结束时放置一个事件?如果我使用fadeIn(),我知道该怎么做,但是使用这种方式恐怕不会……请问您知道怎么做吗? 你让我很开心......很遗憾你不能给这个回复更多的分数。【参考方案2】:

Animate 会很好,只需将 span 的高度先添加到容器 div 并进行动画处理。

$(document).ready(function () 
        $("#spanhide").hide();

        $("#clickhide").click(function () 
            var caption = $(this).text();

            if (caption == "Show span") 

                $('.row').animate(
                    height:'+='+ ($('#spanhide').height() + 20)+'px'  
                );

                $("#spanhide").fadeIn("slow");
                $(this).text("Hide span");
             else 
                $("#spanhide").fadeOut("slow");
                $(this).text("Show span");
            
        );

    );

【讨论】:

@Joëlle 在关闭/隐藏黄色跨度时闪烁【参考方案3】:

最佳解决方案是使用.slideToggle() 函数。

这是一个演示它的小提琴:http://jsfiddle.net/5Fkvv/9/

$(document).ready(function () 
    $("#spanhide").hide();

    $("#clickhide").click(function () 
        $("#spanhide").slideToggle("slow");

        if ($(this).text() == "Show span") 
            $(this).text("Hide span");
         else 
            $(this).text("Show span");
        
    );

);

【讨论】:

如果您有条件使用slideToggle 识别与折叠或展开相关的内容是没有意义的。

以上是关于如何为内容块制作动画?的主要内容,如果未能解决你的问题,请参考以下文章

如何为旧 IE 制作没有 flexbox 的灵活块

动画 UITableView 的页眉和页脚

如何为 CALayer 使用基于块的动画?

如何为我的 GIF tilesheet 制作动画(OpenGL、DevIL、C++)

如何为 iOS 6 xcode 4.6 制作任何时间动画?

如何为png图像制作动画