jQuery回调冻结了

时间:2012-05-17 11:42:47

标签: javascript jquery

I made a little fiddle to illustrate the problem.

Basiaclly这有效:

var visible = $('#container').find(' > div:visible'),
    hidden = $('#container').find(' > div:hidden');

visible.fadeOut(1000, function() {
});
setTimeout(function() { hidden.fadeIn('slow') },1000);

而这不是:

var visible = $('#container').find(' > div:visible'),
    hidden = $('#container').find(' > div:hidden');

visible.fadeOut(1000, function() {
    hidden.fadeIn(100)
});

第二种方式会使页面冻结。

我使用回调的方式有问题吗?

我需要能够将它放在动画队列中,因为我需要能够stop()一切。

有没有办法让这项工作?我在Chrome和FF上打破了

2 个答案:

答案 0 :(得分:4)

第二个解决方案中的问题是,将为每个可见div启动动画,并且对于每个动画(已完成),所有隐藏的div都会启动动画淡入淡出。

答案 1 :(得分:0)

呃,首先,你为什么要使用这样的结构:

 $('#container').find(' > div:visible');

只需使用:

 $('#container > div:visible');

其次,不要使用#container,因为出于某种原因,如果为 301 元素点火fadeOut太多了。

从头开始,我看到jsfiddle已被更改,现在它只是其中的一个元素。它之前崩溃并不奇怪 - 太多的物体。

第三,在fadeOut之后没有任何消息因为在你指定隐藏变量的时候没有隐藏的div。你必须在你的回调中使用它:

 $('#container2 > div:hidden').fadeIn(1000)