Javascript JQuery show()-暂停函数,直到执行回调
我希望我的javascript/jquery应用程序停止执行所有动画,只在显示loading.gif时继续执行 我确实设法显示加载的.gif文件,而其他动画正在进行,但我真的需要它已经显示之前,任何其他动画 因此,我制作了一个方法,等待回调执行,但它没有按预期工作Javascript JQuery show()-暂停函数,直到执行回调,javascript,jquery,halt,Javascript,Jquery,Halt,我希望我的javascript/jquery应用程序停止执行所有动画,只在显示loading.gif时继续执行 我确实设法显示加载的.gif文件,而其他动画正在进行,但我真的需要它已经显示之前,任何其他动画 因此,我制作了一个方法,等待回调执行,但它没有按预期工作 var Shown = false; function ShowLoadingGif() { $("#loading").show("fast", function() { Shown = true;
var Shown = false;
function ShowLoadingGif() {
$("#loading").show("fast", function() {
Shown = true;
});
while(!Shown) {
//wait for callback to be executed
}
Shown = false;
}
看。我不仅想知道如何正确地着手解决这个问题;我也将感谢任何关于为什么它不能像我期望的那样工作的意见
提前谢谢 您可以使用jQuery Deferred对象(请参阅) 我已经更新了你的提琴,现在它会在你预期的东西完成时发出警报 () 我还更新了代码质量
var $promise = $.Deferred();
$promise.done(function() {
alert("Done...");
});
$(function() {
$("button").on("click", function() {
$("#loading").show("slow", function() {
$promise.resolve();
});
});
});
您可以缩短所有这些时间:
$('#loading').show('fast', function(){
console.log('Im loaded');
}).promise().done(function(){
console.log('great loading with you!');
});
因为javascript遵循单线程执行模式。。。这意味着while循环会导致应用程序线程停止执行任何其他代码,包括
show
动画。。。这意味着show
变量永远不会变为true
,因此您的while条件永远不会存在。也许这有帮助:处理这种异步方法的唯一方法是使用回调while(!show)
将使浏览器崩溃。如果您说动画已经在运行,您想暂停它们,请显示gif,然后让它们继续,然后你看到了一个大问题——比简单地将一些代码移到回调函数中要大得多,这听起来像是Ethak,但我无法让它工作。你能看一下这个吗:并告诉我如何确保“加载gif应该已经显示到现在”消息可以延迟到“伟大”消息后的最后一刻?看一看:。您必须将需要延迟的所有内容放入done(function(){…})@user2288476中的回调函数中。如果您觉得我的答案有用,请不要忘记将其标记为有用。如果您还有其他问题,请告诉我。好的,谢谢,但是将所有内容都放在done函数中并不是我想要的。更确切地说,我需要从javascript中的多个点调用ShowLoadingGif(),其余的javascript代码应该等待图片显示。javascript的其余部分可以是从一行到一百行的任意内容,这取决于我调用showLoadingIF()函数的位置。所以我真的需要等待图片显示,然后才退出函数。
$('#loading').show('fast', function(){
console.log('Im loaded');
}).promise().done(function(){
console.log('great loading with you!');
});