2011-11-24 1 views
5

에 대한 내 완료; 애니메이션이 완료 되었습니까?

편집 --- 미안 나의 나쁜 나는 '내가'당신의 코드에 따라 루프

+0

을 [콜백 ] (http://api.jquery.com/fadeIn/) – ExpExc

답변

7

for 루프는 동기식이지만 애니메이션은 비동기식입니다. 재귀를 사용해야합니다.

var i = 0, j = 10; 
(function fadeNext() { 
    if (i < j) { 
     $('#an-element-' + i++).fadeIn(fadeNext); 
    } 
})(); 

http://jsfiddle.net/uq9mH/

+0

감사합니다. 몇 가지 유사한 답변이 있지만 가장 간단합니다. 당신이 말한대로 루프는 이것에 적합하지 않습니다 (지연을 사용하지 않고) –

+0

그 코드는 아름다움입니다. – Mattis

0

에서, 루프는 동일한 요소에 단지를 사라질 것이다 10 시간을 포함하지 않았다. http://api.jquery.com/fadeIn/이 같은

뭔가 (테스트하지) 작업을해야

var counter = 10; 
function fadeIn(elem) { 
    $(elem).fadeIn('slow', function(){ 
     if (counter > 0) { 
      fadeIn(elem); //up to you how you figure out which element to fade in 
     } 
    }); 
    counter--; 
} 

//var elem = $('.something'); 
fadeIn(elem); 
0

당신은 후에 코드를 실행할 수 있습니다 : 어떤 경우에

는 당신이 필요로하는 것은 fadein 방법의 콜백에 전화를 넣어하는 것입니다

$("#foo").fadeIn("slow",function() { 
    alert("done"); 
}); 

를하지만 당신이 뭘하려는 건지 매우 명확하지 않다 : 함수에 배치하여 애니메이션 콜백 매개 변수로 전달. 같은 요소를 10 번 페이딩하고 있습니까?

+0

혼란스럽게 죄송합니다. 코드를 약간 수정했습니다. 문제는 for 루프가 콜백을 기다리지 않고 계속 수행한다는 것입니다. 이 스 니펫을 사용하면 모든 요소가 동시에 사라지고 한 번에 10 개의 경고 상자가 표시됩니다. –

+0

@matthew 죄송합니다. 이것은 콜백 구문의 예일뿐 아니라 열 개의 요소에 대한 완전한 해결책으로 의도되지 않았습니다. 허용 된 대답의 재귀 적 솔루션이 최적입니다. AFAIK –

0

이 시도 :

for (i = 0, j = 10; i < j; i++) { 
    $('.try').each(function() { 
     $(this).delay(1000).fadeOut().delay(1000).fadeIn(); 
    }); 
} 

당신은 지연 기능 내부의 지속 시간을 변경할 수 있습니다. Here is the jsFiddle.

0

당신은 모든 항목에 대한 고정 된 지연이있는 경우이 코드 줄 사용할 수 있습니다 :

$(this).fadeIn().delay(2000).fadeOut(); 

대신

$(this).fadeIn(); 
사용할 수
관련 문제