2012-03-29 4 views
0

이 istuation 있습니다. 필자는 요소를 페이드 아웃하고 페이드 인하는 함수에 setTimeout을가집니다. 몇 초 후에이 타임 아웃은 cleartimeout으로 지워지고 그 직후에는 .hide()가 호출되어이 요소를 숨 깁니다. 문제는 때로는 요소를 숨기지 않는다는 것입니다. 타이밍과 관련이 있다는 느낌이 들었습니다.cleartimeout 함수 완료 후 실행 (jQuery)

예 : last_func에서 나는 두 간격을 취소하고 요소 숨기기,하지만 때로는 요소가 여전히 보이는지

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
그냥 제안

하지만,이 비트는 나에게 잘못 나타납니다 당신이, 당신이 그 이후에 새로운 제한 시간을 설정하는 모든 것을 중지 end_func()를 호출하는 경우에도

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

.

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

또 다른 힌트 :

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

죄송합니다. 저는 머리에서 쓰고 있습니다. 지금 당장 실제 정보를 얻지 못했습니다. 물론 end_func()를 호출 한 후; 나는 돌아온다. 게다가. 기본적으로 모든 것이 잘 작동하고 있습니다. 때로는 요소가 숨겨져 있지 않습니다. – Tom

+0

@Tom ok하지만 hide를 호출하기 전에'stop (true, true) '를 추가하는 것이 좋습니다. – Niko

+0

좋아요, 진짜 코드를 보여 주면 좋을 것 같습니다. www.tomasdostal.com/projects/thirst_game에서 볼 수 있습니다. 그러나 코드가 매우 엉망입니다 – Tom

0

을했을 경우, end_func() 가정이 될 것입니다 last_func()?

이 작품 : 애니메이션이 자동으로 JQuery와에 대기하고 있기 때문에이 작동 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(); 
    }); 
}; 

: http://jsfiddle.net/CZ9hr/1/

나는 당신이 달성하고자하는 것 무엇에 대한 간단한 접근 방식을 제안 할 수 있습니다.

+0

당신은 자신에게 www.tomasdostal.com/projects/thirst_game을 확인할 수 있습니다 실행 fadeIn/fadeOuts이 요소의 은신처에 영향을 미치는 것을 방지하기 위해, 당신은 애니메이션 대기열을 취소한다 , 때로는 요소가 숨기지 않습니다 – Tom

0

기본적으로 fadeIn 및 fadeOut 사용 지속 시간은 400 밀리 초이며, 첫 번째 매개 변수를 설정하여 변경할 수 있습니다.

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

내 스크립트에서 나는 지속 시간이 50으로 설정되었습니다. – Tom

관련 문제