2011-09-18 6 views
0

당신의 도움이 필요합니다. jquery 패널로 애니메이션을 적용하고 싶습니다. 그것은 버튼 (함수 OPEN_PANEL)을 클릭하여 열어야하고 다른 PHP 페이지를로드 한 다음 클래스 "닫기"(함수 CLOSE_PANEL)를 사용하여 div를 클릭 할 때 닫아야합니다. 잘 작동하지만, 이미 열려있는 패널을 열려고 할 때 문제가 발생합니다. 그것은 열려있는 하나를 닫아야하고 그 후에 내가 선택한 마지막을 열어야하지만 동시에 두 함수를 실행하는 것처럼 보입니다. 문제를 어떻게 해결할 수 있습니까? Jquery : 다른 함수가 끝나면 함수를 실행하십시오.

var panel_is_open=0; 
var last_open_panel=""; 

function animation_open_panel(id){ 
    window_height=$(window).height()*0.85; 
    $("#"+id+"_button").css({'background-color':'rgba(255,255,255,0.8)', 'box-shadow':'0px 5px 10px #39C', '-webkit-box-shadow':'0px 5px 10px #39C'}); 
    $("#main_panel").show().animate({ height: window_height+"px" }, 1500) 
    .animate({ width: "90%" },1000); 
    $("#main_panel").queue(function(){ 
     $(".close").show(); 
     $("#page_container").hide().load(id+"/"+id+".php",function(){ 
      $("#page_container").fadeIn(1000); 
     }); 
     $(this).dequeue(); 
    }); 
} 

function animation_close_panel(){ 
    $("#page_container").fadeOut(1000, function(){ 
     $("#main_panel").animate({ width: "637px" }, 1000) 
     .animate({ height:"0px" }, 1500, function(){ 
      $(".close").hide(); 
      $("#"+last_open_panel+"_button").css({'background-color':'', 'box-shadow':'', '-webkit-box-shadow':''}); 
     }); 
    }); 
} 

function close_panel(){ 
    if(panel_is_open==1){ 
     animation_close_panel(); 
     panel_is_open=0; 
    } 
} 

function open_panel(id){ 
    if(panel_is_open==0){ 
     animation_open_panel(id); 
     last_open_panel=id; 
    } 

    else if(panel_is_open==1){ 
     if(id!=last_open_panel){ 
      close_panel(); 
      open_panel(id); 
     } 
    } 

    panel_is_open=1; 
} 

당신의 도움이 사전에 대단히 감사합니다

이 자바 스크립트 코드입니다.


제안 해 주셔서 감사합니다.하지만 두 가지 해결책으로 문제를 해결할 수 없습니다. 나는 어떤 것을 착각하고 있지만 나는 무엇을 이해할 수 없다.

이 내 코드입니다 : 내가 착각하고

function close_panel(){ 
    if(panel_is_open==1){ 
     // animations here 
     panel_is_open=0; 
    } 
} 

function close_open_panel(next){ 
    close_panel(); 
    next(); 
} 

function open_panel(id){ 
    if(panel_is_open==0){ 
     // animations here 
     last_open_panel=id; 
     panel_is_open=1; 
    } 

    else if(panel_is_open==1){ 
     if(id!=last_open_panel){ 
      close_open_panel(function(){ 
       open_pannel(id); 
      }); 
     } 
    } 
} 

어떤 생각? 감사합니다. .

답변

0

함수에서 콜백을 사용할 수 있습니다.

open(function(value) 
{ 
    // anything here will be executed 
    // after the function has finished 
}); 

callback()function(value)의 값이 다시 호출 할 수있는 가치를 전달하는 간단한 기능을 선택하는 대신 반환 할 수있다 :

function open(callback) 
{ 
    // do stuff 
    callback(some_value); 
} 

그럼 당신은이 작업을 수행하여 사용할 수 있습니다 그러나 비동기 콜백이 필요한 일부 기능에는 유용합니다. 콜백 기능에 대한

더 많은 정보 : 당신이 jQuery를 특정 솔루션 후에 경우

1

Deferred Object를 검색 :에 도입

jQuery.Deferred을() 버전 1.5는 다중 콜백을 콜백 대기열에 등록하고 콜백 대기열을 호출하며 성공 또는 실패를 릴레이 할 수있는 체인 가능 유틸리티 객체입니다 동기 또는 비동기 기능의 상태.

+0

와우, 강력 해 보입니다. – bzlm

관련 문제