如何在jQuery中推迟函数执行

时间:2014-05-21 19:28:45

标签: javascript jquery

我今天疯狂地混淆了延迟jquery执行的所有可用代码。

现在我写了这个

 $('#filterTheTable').click(function () {
                        $('#waitingGif').show('fast')
                                 .promise()
                                 .done(FilterTable);

所以GIF出现了,几秒钟之后桌子会过滤掉,一切都很好(除了我没有隐藏GIF。

所以我扔进去......

 $('#filterTheTable').click(function () {
                        $('#waitingGif').show('fast')
                                 .promise()
                                 .done(FilterTable);
 $('#waitingGif').hide('fast');

正如你们许多人可能已经看到的那样,gif闪烁一秒钟会发生什么,并且FilterTable函数继续执行。

我已经阅读了一些内容,但似乎无法绕过延迟函数。所以我放弃并将hide('fast')代码放在FilterTable中,但现在GIF在函数执行时冻结。

然后我想,哦,也许我可以再次致电承诺!

 $('#filterTheTable').click(function () {
                        $('#waitingGif').show('fast')
                                 .promise()
                                 .done(FilterTable)
                                 .promise()
                                 .done(Function(){$('#waitingGif').hide('fast')});

但是我得到一个错误,即该对象不支持promise(我现在假设.Done()没有返回正确的类型)

我知道这很容易做到......但我似乎并没有把我的想法包裹起来。是否有任何好的帖子/解决方案可以让我重回轨道?

感谢所有人。

1 个答案:

答案 0 :(得分:0)

所以我找到了答案。基本上我正在做ShowGif.Promise.Done(Function)然后在Function内隐藏gif。 gif冻结的答案在this great answer.

总之,DOM重型操作不适合您的GIF动画。您可以拆分该功能,以便模拟多线程。要做到这一点,你只需要拆分功能,让DOM 呼吸

谢谢大家。