如何在jQuery动画上完成所有回调后才能运行一些代码?

时间:2012-01-30 21:56:51

标签: javascript jquery

我有一些带回调的动画代码。我需要一段代码才能在回调完成后运行。我不想修改动画代码或回调。如何在运行其他代码之前确保所有回调都已运行。我应该看看队列吗?当动画完成但仍有待回调的回调时,该项是否已从队列中删除?我该怎么办?

var animateFunc = function () {
        $('#search').animate({ height: '0px', opacity: '0.0' }, 'fast', 'linear',                          function () {
            $('#search-state').val(searchContainerState.currentPage);

        });
    };

示例电话:

animateFunc();
someOtherFunc(); //someOtherFunc needs to run after the animation callback code.  

我该如何正确地做到这一点? 谢谢!

2 个答案:

答案 0 :(得分:1)

下面:

$( '#search' ).queue( someOtherFunc );

这会将该函数添加到效果队列的末尾,这意味着它将在现有动画操作之后调用。

现场演示: http://jsfiddle.net/BkmWg/

答案 1 :(得分:0)

animateFunc将回调作为参数,然后在任何使用animateFunc的地方,如果你想在动画上执行任何操作,请将处理程序作为参数传递给它。试试这个。

var animateFunc = function (callback) {
        $('#search').animate({ height: '0px', opacity: '0.0' }, 
            'fast', 'linear', function () {
                $('#search-state').val(searchContainerState.currentPage);

                if($.isFunction(callback)){
                    callback();
                }
        });
    };

animateFunc(someOtherFunc);

我知道我正在修改您不需要的animateFunc回调,但这是确保动画完成并且您想要执行任何回调的正确方法。