2012-03-29 101 views
0

我有这个估计。我有一个setTimeout函数,其中我淡出和淡入元素。在几秒钟内,这个超时被清除,并且在被调用.hide()后立即隐藏这个元素。问题是有时它不隐藏元素。我有一种感觉,它与时间有关。cleartimeout函数完成后执行(jQuery)

例子:

function first_func(){ 
    $('.element').fadeOut(function(){ 
     // Do other stuff like change element's position 
     $('.element').fadeIn(); 
    }); 

    interval1 = setTimeout(function(){first_func()},500);   
} 

function second_func(){ 
    countdown--; 
    if (countdown<0){ 
     last_func(); 
    } 
    interval2 = setTimeout(function(){second_func()},1000);   
} 

function begin_func(){ 
    first_func(); 
    second_func(); 
} 

function last_func(){ 
    clearTimeout(interval1); 
    clearTimeout(interval2); 
    $('.element').hide(); 
} 

所以基本上问题是,在last_func我同时清除间隔和隐藏元素,但有时该元素的网页上仍然可见。所以我猜测,它并隐藏,但间隔仍在进行中,并在消失回去。

如果有人有一些建议,请

回答

2

只是一个建议,但该位出现错误的对我说:

function second_func(){ 
    countdown--; 
    if (countdown<0){ 
     end_func(); 
    } 
    interval2 = setTimeout(function(){second_func()},1000);   
} 

即使你打电话end_func()停止一切,你设置后,一个新的超时。

function second_func(){ 
    countdown--; 
    if (countdown<0){ 
     end_func(); 
    } else { 
     interval2 = setTimeout(second_func, 1000); 
    }  
} 

另一个提示:为了避免运行淡入/ fadeOuts影响元素的隐藏,你应该清除动画队列:

$('.element').stop(true, true).hide(); 
+0

对不起,我一直在从头开始写它,我现在没有我的实际来源。当然在调用end_func()之后;我确实回来了;以及。基本上一切工作都很好,只是有时元素不会隐藏 – Tom 2012-03-29 09:14:49

+0

@Tom ok,但考虑在调用hide之前添加'stop(true,true)',这可能有所帮助。 – Niko 2012-03-29 09:17:13

+0

好吧,我想最好向您展示真实的代码,您可以在www.tomasdostal.com/projects/thirst_game上看到它。但代码很杂乱 – Tom 2012-03-29 09:18:03

0

你似乎永远不会调用last_func,是end_func()应该是last_func()?

这工作: http://jsfiddle.net/CZ9hr/1/

我可能会建议你仿佛想要实现更简单的方法:http://jsfiddle.net/fSEjR/2/

var countdown = 3, 
    $element = $('.element'); 

for (var i = 0; i < countdown; i++) { 
    $element.fadeOut().fadeIn(function() { 
     countdown--; 
     if (countdown === 0) $element.hide(); 
    }); 
}; 

这工作,因为动画在jQuery的自动排队。

+0

您可以检查自己www.tomasdostal.com/projects/thirst_game ,有时元素不会隐藏 – Tom 2012-03-29 09:18:49

0

默认情况下,fadeIn和fadeOut使用持续时间为400毫秒,你可以通过设置第一个参数来改变它。

$('.element').fadeOut([duration] [, callback]); 
+0

这只是一个例子,在我的脚本中,我的持续时间设置为50 – Tom 2012-03-29 09:15:15

相关问题