如何在动画完成后删除元素?

Posted

技术标签:

【中文标题】如何在动画完成后删除元素?【英文标题】:How to remove an element AFTER animation completes? 【发布时间】:2010-11-28 18:53:23 【问题描述】:

我正在使用以下代码为 div 设置动画。

<script>
  $(function() 
    $("a.shift").click(function() 
      $("#introOverlay").animate(
        height: 0,
      , 2000)
    );
  );
</script>

动画完成后,我想将其删除。我该怎么做?

【问题讨论】:

【参考方案1】:

animate 需要另外 2 个参数,所以你可以这样做:

$("a.shift")
    .click(function() 
        
            $("#introOverlay")
                .animate(height: 0, 2000,"linear",function()
                    
                        $(this).remove();
                    
                )
        
    );

未经测试。

编辑:经过测试:这是我使用的完整页面,扩展为 300 像素,使删除更加明显:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
        <script type="text/javascript">
            //<![CDATA[
            $(document).ready(function()
            
                $(".shift").click(function() 
                
                    $("#introOverlay")
                    .animate(height: 300, 2000,"linear",function()
                    
                        $(this).remove();
                    )
                );
            );
            //]]>
        </script>
    </head>
    <body>
    <a class="shift" href="javascript:void(0)">clickme</a>
    <div id="introOverlay" style="background-color:red;height:200px;">overlay</div>
    </body>
</html>

【讨论】:

嗨 Spender,动画完成后不会删除元素。【参考方案2】:

JQuery animate(params, [duration], [easing], [callback] ) 提供了添加每次动画完成时调用的回调的可能性

回调(可选)功能:A 每当 动画完成,执行一次 每个元素都有动画效果。

语法非常简单:

<script>
$(function() 
    $("a.shift").click(function() 
        $("#introOverlay").animate(
        height: 0,
        , 2000, "linear",
            function() 
                $("#introOverlay").hide();
            
        )
        );

    )
</script>

另见SO question

【讨论】:

谢谢达夫,你能给我一些示例代码吗?这是我不明白的语法。 查看我链接的问题,那里有一个代码示例(也复制到这里)。基本上你只需将回调函数作为参数传递。【参考方案3】:

remove() 调用放入效果队列中,如下所示:

$("a.shift").click(function() 
  $("#introOverlay").animate(
    height: 0,
  , 2000);
  $("#introOverlay").queue(function() 
    $(this).remove();
    $(this).dequeue();
  );
);

【讨论】:

我正在寻找一种方法来更新队列中的文本。这句话非常适合将 .text("") 之类的非队列调用放入队列。【参考方案4】:

使用与动画所用时间相同的 window.timeout。

【讨论】:

以上是关于如何在动画完成后删除元素?的主要内容,如果未能解决你的问题,请参考以下文章

在其他元素完成动画后动画某些元素

添加到元素后如何删除自动完成功能?

如何在 QML 中动画添加和删除元素到布局?

如何防止在动画完成之前点击 html 元素?

记住动画后的单元格状态

如何在 Swift 3 中加载/删除带有动画的自定义视图