为什么动画在回调之前没有完成

时间:2011-07-10 10:04:01

标签: jquery callback slide

在我的学习中,我总是在jQuery中学习和理解回调:

  

在当前动画(效果)结束后执行回调函数。

     

[...]使用动画,即使动画未完成,也可以运行下一行代码。这可能会造成错误。   为防止这种情况,您可以创建回调函数。直到动画结束后才会调用回调函数。    引用:www.w3schools.com[...]

  

回调是一个函数,它作为参数传递给另一个函数,并在其父函数完成后执行。    引用:www.jquery.com[...]

我的回调使用因某种原因无效。

请查看以下代码:

$(page).slideUp("slow", function() {

    $('div#details').html(details);
    $(page).slideDown("slow");              

});

这应该使内容框向上滑动并因此消失,然后将内容更改为新内容,最后内容框再次向下滑动(显示)。我需要这三个步骤按此顺序相继发生,但每个步骤必须仅在前一个步骤完成时开始。这就是为什么我使用回调而不仅仅是这个:

$(page).slideUp("slow");

$('div#details').html(details);

$(page).slideDown("slow");

这将使一切都在同一时间发生。

我的代码有效,只需点击一下按钮即可转移页面内容。但动画并没有像我预期的那样做出反应。单击该按钮时,内容会立即消失,而不会显示任何动画幻灯片。然后新内容以精美的动画播放幻灯片。

Click around the left sidemenu here, to see what happends.

我不明白为什么没有动画幻灯片,但我怀疑回调不像我想的那样。看起来回调在第一个动画开始时触发,而不是在动画结束之前等待触发。或者也许只是幻灯片根本不起作用?

任何人都可以向我解释一下,我不知道并且在这个非常简单的代码中没有看到包括回调的内容吗?

2 个答案:

答案 0 :(得分:2)

您可以使用延迟功能作为解决方法。

$(page).slideUp(500);
$('div#details').html(details);
$(page).delay(500).slideDown(500);

答案 1 :(得分:1)

将slideDown放入回调

$(page).slideUp("slow", function() {

    $('div#details').html(details);
    $(page).slideDown("slow");
});

您之前的代码仅在完成slideUp后更新div #details。