2009-06-30 9 views
94

나는 이것에 대해 전에 읽은 것이 틀림 없지만 어디서나 찾을 수는없는 것 같습니다.
나는 요소를 제거한 후에 fadeOut() 이벤트를 가졌지 만, jQuery는 페이드 아웃을 끝내기 전에 요소를 제거하고 있습니다.
엘리먼트가 페이드 아웃 될 때까지 jQuery를 대기시키는 방법은 무엇입니까? 다음을 제거 하시겠습니까?효과가 끝날 때까지 jQuery를 기다리는 방법은 무엇입니까?

$(selector).fadeOut('slow', function() { 
    // will be called when the element finishes fading out 
    // if selector matches multiple elements it will be called once for each 
}); 

Documentation here :

답변

146

당신은 콜백 함수를 지정할 수 있습니다.

+0

빙고. 나는 그것이 그것이라고 생각했다. 그러나 내가해야 할 필요가있는 것은 제거 부분뿐만 아니라 거기에 내 모든 기능을 넣는 것이었다. 추신 관심있는 사람이 있으면 책을 읽었으며 이제 JQuery 학습 - 더 나은 상호 작용 및 디자인을 발견했습니다. 다시 한 번 감사드립니다 – uriDium

+0

누군가가 오래된 jQuery를 가지고 있다면이 "애니메이션 완료 콜백"버그는 괴로운 것입니다 : http://bugs.jquery.com/ticket/5684 – JustAMartin

+1

여기 upvote 번호가 있습니다 100 – kaiser

6

전환하려는 항목이 하나씩 사라지고 동일한 위치에서 다른 항목이 사라지면 div에 {position : absolute} 속성을 추가하여 두 애니메이션이 서로 위에 재생되도록 할 수 있습니다. 한 애니메이션이 끝나기 전에 기다리지 않아도 다음 애니메이션이 시작됩니다.

157

jQuery 1.6 버전에서는 .promise() 메서드를 사용할 수 있습니다.

$(selector).fadeOut('slow'); 
$(selector).promise().done(function(){ 
    // will be called when all the animations on the queue finish 
}); 
+2

이것은 대부분의 jQuery 애니메이션에서 중복됩니다. 대부분의 메소드에는 콜백 인자가 있기 때문에'promise()'또는'when()'과'done()'을 사용하면 써드 파티 메소드 나 심지어 자신의 메소드로도 매우 멋진 동작을 활용할 수 있습니다. 1. .promise()를위한 +1! – stuartc

+2

그레이트 솔루션! –

+4

전에 들어 본 적이 없으며, 그냥 내 엉덩이를 저장했습니다. – prismspecs

9

당신은뿐만 아니라 promise이 완료 될 때까지 기다려야 $.when()를 사용할 수 있습니다

이 경우
var myEvent = function() { 
    $(selector).fadeOut('fast'); 
}; 
$.when(myEvent()).done(function() { 
    console.log('Task finished.'); 
}); 

당신이뿐만 아니라 실패 할 수 요청을하고있어, 당신은 더욱 한 단계를 갈 수 있습니다 :

$.when(myEvent()) 
    .done(function(d) { 
     console.log(d, 'Task done.'); 
    }) 
    .fail(function(err) { 
     console.log(err, 'Task failed.'); 
    }) 
    // Runs always 
    .then(function(data, textStatus, jqXHR) { 
     console.log(jqXHR.status, textStatus, 'Status 200/"OK"?'); 
    }); 
+1

'myEvent()'가 약속을 반환하지 않고'$ .when()'을 사용하는이 대답의이 부분은 작동하지 않습니다.when()'는 당신이 그것을 할 수있는 하나 이상의 약속을 전달할 것을 기대한다. – jfriend00

관련 문제