jQuery .unload() 忽略淡出并跳过
Posted
技术标签:
【中文标题】jQuery .unload() 忽略淡出并跳过【英文标题】:jQuery .unload() ignores fadeOut and skips away 【发布时间】:2011-07-12 02:50:30 【问题描述】:首先,对于双重问题,我感到抱歉,但我觉得这是一种相当不同的方式。
我有:
$(document).ready(function()
$('#container').fadeOut(0);
$('#container').fadeIn(500);
$(window).unload(function()
alert("Hello.");
$('#container').fadeOut(500);
);
);
它应该通过淡入显示页面,并通过淡出使其卸载。虽然,当我退出页面或提交其中的表单时,我只看到警报,但在我按 OK 后,页面就消失了,下一个出现了。不执行淡入淡出。
我该如何解决这个问题?
【问题讨论】:
更好:$('#container').hide().fadeIn(500);
您需要的是同步淡出。 fadeOut
单独不会这样做,因为它是异步的。
【参考方案1】:
卸载中调用的任何内容都需要同步。我相信fadeOut
方法会调用许多异步回调。因此,当您调用fadeOut
时,会设置一些回调以供稍后制作动画。但是,卸载不会等待。
查看this question 自行构建动画。
【讨论】:
@Jordan 问题是:“我该如何解决这个问题?” 应该可以,但是我怎样才能让动画只在需要卸载时才执行呢?将动画放在卸载调用中会得到相同的结果。 我不知道如何使动画同步工作。我认为您将不得不编写自己的函数来改变不透明度。 是的,但我仍然需要一种方法来捕捉页面何时需要卸载,而无需实际卸载,直到我完成为止。 您在传递给unload
的函数中的任何内容都将按顺序运行。所以只要你不调用异步函数,你就不用担心它。基本上,您需要按顺序排列这些。$('#container').css('opacity','0.9')
每一个都具有较小的不透明度。不过,您应该将 jQuery 元素缓存在一个变量中,这样您就不会每次都遍历 DOM。【参考方案2】:
现在有一个 [, complete ] 回调(1.0+):
http://api.jquery.com/fadeOut/#fadeOut-duration-complete
【讨论】:
以上是关于jQuery .unload() 忽略淡出并跳过的主要内容,如果未能解决你的问题,请参考以下文章
使用 Promise 并跳过代码时,Mocha 测试超时,为啥?