2010-08-24 48 views
2

我遇到了jquery脚本的问题...应该是一件容易的事情,但有一些奇怪的行为我无法弄清楚。jquery:在fadeOut之前运行的函数完成

当我点击一个链接时,我希望我的内容消失,然后重新出现新的内容。所有内容都存储在标签中。

下面是我使用的是什么:

$("#events_link").click(function() { 
    $("#content").children(".content").fadeOut(fadetime, function() { 
     $("#events").fadeIn(fadetime); 
    }); 
    return false 
}); 

然而,淡入不是等到内容已经淡出。

我的整个页面在这里(在一个页面上的所有代码/脚本):

http://dl.dropbox.com/u/4217965/HorrorInTheHammer/index.html

有什么想法?

回答

9

这将运行.content_box元素...和隐藏的人的每一个将立即完成他们的动画,所以你想是这样的:

$("#events_link").click(function() { 
    $("#content > .content_box:visible").fadeOut(fadetime, function() { 
     $("#events").fadeIn(fadetime); 
    }); 
    return false 
}); 

最重要的变化是:visible selector,所以只可见的一个淡出......并触发回调以显示下一个。

+0

完美。谢谢,尼克。 – MetalAdam 2010-08-24 18:21:39

+0

谢谢。你是泰诺,我的头痛长达1小时。 – Klikerko 2013-09-16 15:03:39

-2

你的网页的当前版本不会出现在所有的工作,因为你有类似

$("#content").children(".content") 

,而不是

$('#content').children('.content_box') 

修正了,它会更容易解决。 ..

EDIT(现在上面的修复完成):

它看起来像fadeOut函数不像文档中那样工作,至少在Firefox 3.5中,就回调而言。我想你可能希望可以通过使用一个小平原岁的javascript来实现的:

$('#content').children('.content_box').fadeOut(fadetime); 
window.setTimeout(function() { $('#events').fadeIn(fadetime); }, fadetime + 100); 
return false; 

我认为,这将更有可能完成你想要通过努力确保旧的内容消失了什么,不再实际上正在在淡入新内容之前腾出空间。让我们都知道它是否适合你。

+0

哎呦。修复。 – MetalAdam 2010-08-24 17:23:34

+0

我不认为在大多数情况下设置超时是一个好主意...... – 2010-08-24 18:05:34

+0

迈克 - 你有替代解决方案吗? 安德鲁 - 作品。这只是一个临时页面,所以现在就可以完成。 谢谢! – MetalAdam 2010-08-24 18:19:12

5

windows.setTimeout并不总是有用,因为有时该过程可能比您设置的超时花费更多的时间。所以最好在fadeOut完成后使用下面的代码来运行fadeIn。

$("#events_link").click(function() { 
    $.when(
     // Your function which you want to finish first 
     // $("#content").children(".content").fadeOut(fadetime) 
    ).done(function() { 
     // The function which you want to run after finishing the previous function 
     // $("#events").fadeIn(fadetime); 
    }); 
    return false 
});* 
相关问题