我在更改div的内容时遇到麻烦。我要实现的是等待动画结束,然后更改内容以启动动画以显示新信息。该代码有时会起作用,这意味着有时会挂起(isWorking永远不会为假,因为动画冻结或动画永远都没有时间从while内的不断循环中完成。)是否有一种方法可以等待动画结束并然后更改内容? (下面的显示方式使我可以在动画进行过程中浏览新内容,从而节省了最终用户的时间。)是否有办法在动画结束时进行捕捉?

 function DesignResults(InnerHTML) {
            while(isWorking){
            }
            $("#holder").html(InnerHTML);
            ShowSearch(true);
    }
    var isWorking = false;
    function ShowSearch(show) {
            isWorking = true;
            var outer = $("#outer");
            var inner = $("#inner");
            var height = 0;
            if (show == true)
                height = inner.outerHeight();
            var loaderHeight
            if (height > 0) {
                loaderHeight = 0;
            } else {
                loaderHeight = 31;
            }
            outer.animate({
                'height': height + "px"
            }, 1600, function () {
                $("#loading").animate({ 'height': loaderHeight + "px" }, 900, function () { });
                isWorking = false;
            });
    }


我知道如果动画仍在进行中,$(elem).is(':animated')会给我,但由于while不断循环,这仍然冻结了所有内容。谁能指出我正确的方向?

编辑:
我想我被误解了。这是我要实现的计划:


开始隐藏动画。
当动画隐藏时,我正在启动另一个函数来获取内容
如果我更快地获得内容,我希望等待动画结束,然后更改内容并再次显示该图层。
如果数据需要一秒钟以上的时间才能返回,则这里没有问题




我同意在动画按照您的建议完成后就可以执行此操作,但是我已经将动画设置为将近1秒的执行时间,该时间可用于从数据库中提取数据。我正在寻找最有效的代码。

最佳答案

此函数中的最后一个参数:

$("#loading").animate({ 'height': loaderHeight + "px" }, 900, function () { });


是“完成”功能。动画完成后将调用此函数。

因此,完成后,您可以在此函数中执行以下操作:

$("#loading").animate({ 'height': loaderHeight + "px" }, 900, function () {
    alert('animations complete!');
});


- - 编辑 - -

根据您的编辑,您可能想要执行以下操作。


有一个变量,当两个都结束时,它会让您知道:

var signal = 0;

具有更改其中内容的功能:

function changeContent() {
    signal++;
    if (signal === 2) {
        // change the content code here
        signal = 0;
    }
}

动画结束后,请致电:

changeContent();

抓取数据后,请致电:

changeContent();



当任一函数第一次调用changeContent()时,它将把signal递增到1并退出该函数。然后,第二次它将signal递增为2。由于signal === 2,您知道动画和抓取数据均已完成,因此现在可以更改内容。

使用整数执行此操作的好处在于,如果您希望3、4、5+个函数在更改内容之前完成工作。在这种情况下,您只需要通过增加if (signal === 2)中的数字来更改条件。

07-28 02:43
查看更多