2013-07-05 5 views
3

내가 자바 스크립트에서 다음과 같은 방법이 있습니다 애니메이션 기능을 기다립니다 자바 스크립트

Controller.prototype.changeScene = function (curScene, newScene) { 
    sf.scene.hide(curScene); 
    sf.scene.show(newScene, curScene); 
    sf.scene.focus(newScene); 
}; 

그리고 다른 JS 클래스에

:

Test.prototype.handleHide = function() { 
    alert("SceneDialog.handleHide()"); 
    $(".screenOverlay").fadeOut("slow"); 
    $(".dialogBox").fadeOut("slow"); 
}; 

sf.scene.hide()handleHide 메소드를 호출합니다. handleHide에는 애니메이션이 있지만 표시되지 않습니다. 컨트롤러는 완료 될 때까지 기다리지 않습니다.

행운없이 $.when(sf.scene.hide()).done()을 시도했습니다.

제안 사항?

+0

애니메이션 기능을 사용하고 있습니까? 애니메이트? 'fadeout'과'fadein'에는 콜백 함수가 있습니다. – dm03514

+1

완성을 기다리고있는 애니메이션은 무엇입니까? 작성된 것처럼, 두 fadeOut이 실행되고 즉시 다음 명령문으로 돌아갑니다. – Alan

+0

http://www.learningjquery.com/2009/01/quick-tip-prevent-animation-queue-buildup –

답변

0

jquery 애니메이션 함수를 사용하는 경우 jquery는 일반적으로 함수가 완료 될 때 호출되는 complete 매개 변수를 제공합니다. fadeout를 사용

:

$('#test').fadeOut('slow', function() { 
    // fadeout is finished!! do something 
}); 
1

당신은 이전이 완료된 후에 만 ​​발생하는 대기중인 애니메이션의 목록을 유지하기 위해 jQuery를 queue를 사용할 수 있습니다.

sf.scene.hide(curScene); 
sf.scene.show(newScene, curScene); 
sf.scene.focus(newScene); 

이 될 것입니다 :

sf.scene.hide(curScene); 
sf.scene.queue(function() { 
    $(this).show(newScene, curScene); 
    $(this).dequeue(); 
}); 
sf.scene.queue(function() { 
    sf.scene.focus(newScene); 
    $(this).dequeue(); 
}); 
1

당신은 모든 애니메이션이 끝날 때 콜백을 호출하는 JQuery와의 promise() 기능을 사용할 수 있습니다.

Test.prototype.handleHide = function (callback) { 
    $(".screenOverlay,.dialogBox").each(
     function(i) { 
      $(this).fadeOut("slow"); 
     } 
    ); 
    $(".screenOverlay,.dialogBox").promise().done(callback); 
}; 

을 그리고 handleHide에 인수로 콜백을 전달합니다

사용해보십시오. 귀하의 changeScene 함수는 다음과 같아야합니다 :

Controller.prototype.changeScene = function (curScene, newScene) { 
    sf.scene.hide(curScene, function() { 
     sf.scene.show(newScene, curScene); 
     sf.scene.focus(newScene); 
    }); 
}; 
+0

이것은 콜백 2x를 호출 할 것인가 아니면 페이드 애니메이션이 완료되고 콜백을 한 번 호출 할 때까지 기다릴 것인가? – Alan

+0

좋은 질문이었습니다. 다음은 jquery doc 문입니다. "여러 요소가 애니메이션으로 표시되는 경우 콜백은 애니메이션 전체에 대해 한 번이 아니라 일치 된 요소 당 한 번 실행된다는 점에 유의해야합니다." 맞습니다. 콜백이 두 번 실행됩니다. – Sebastien

+0

promise() 메서드가 그 목적으로 만들어진 것 같습니다. http://api.jquery.com/promise/ – Sebastien

관련 문제