2011-01-02 10 views
1
을 입력하십시오.

지도 크기가 너무 큰 경우 Google지도 앱이 있습니다. 문제가 발생하는 이유는 Jquerys 애니메이션을 사용하고 그 기능을 끝내기 전에 반환하는 것입니다. 그리고 그것이 크기가 조정 된 Google지도를 트리거해야합니다.애니메이션이 끝날 때까지 기다렸다가

따라서 맵은 트리거되기 전에 줌인되고 범위가 설정되어 오프셋됩니다. 두 번째로 트리거되었을 때만 올바르게 작동합니다.

function doResize() { 
    if ($("#map_div").width() > 600) { 
     $("#stores").hide(0, function(){ 
      $("#map_div").animate({width: '500px'}, function(){ 
       google.maps.event.trigger(G_MAP, 'resize'); 
       $("#stores").fadeIn(1000); 
      }); 
     }); 
    } 
} 

나는 두 가지 이유에 대한 콜백의 코드의 나머지 부분을 넣어 수 없습니다, 하나는 자사의 큰 기능과 두 개의 장소에서 사용. 또한 너비는 한 번만 600 이상입니다.

newyork의 오프셋을 클릭하고 중심에 있지 않은 경우 어떻게 다른 상태를 클릭하고 뉴욕을 다시 클릭하는지주의하십시오.

편집 :

내가 애니메이션 동기를하고 일을 할 수 없기 때문에 :

while($("#map_div").width() > 500) { 
    $("#map_div").width($("#map_div").width() - 1) 
} 

은 모두, 내가 애니메이션을 도랑하기로 결정했습니다 원활하지 않습니다. Jquery를 비동기로 실행해야하는 경우가 종종 있습니다. 특히 자바 스크립트 자체가 단일 스레드 인 경우 완료 될 때까지 기다릴 수있는 옵션이 있다고 생각할 수 있습니다.

답변

4

두 가지 주된 이유 때문에 콜백에 나머지 코드를 넣을 수 없습니다. 하나는 큰 기능이며 두 곳에서 사용됩니다. 또한 너비는 한 번만 600 이상입니다.

그럼에도 불구하고, 그건 당신이   — 또는 오히려, 당신은 단지 콜백에서 호출을 추가, 이동이 코드에 원하지 않는 무엇을해야하는지 정확히. 애니메이션이 끝나기를 기다리는 함수의 반환을 유지할 수는 없습니다. JavaScript에서는 그렇게 할 수 없습니다. 당신이 그것을하려고 시도 할지도 모르는 다양한 방법 (바쁜 대기 등)은 작동하지 않습니다. 한 번만 발생한다는 점에 상관없이 콜백을 사용해야합니다.

+0

자바 스크립트는 항상 함수가 완료 될 때까지 기다리고 Jquery는 setIntervals 및 setTimeouts를 '가짜'멀티 스레딩에 통합 할 때까지 기다립니다. 나는 Jquery가 애니메이션이 끝날 때까지 기다릴 백엔드가 있다고 생각했을 것이다. – ParoX

+1

@BHare : * "기능이 완료 될 때까지 자바 스크립트가 항상 기다리는 것이 나의 생각입니다."* 오른쪽. * "나는 Jquery가 애니메이션이 완성되기를 기다리는 백엔드를 가질 것이라고 생각했을 것이다."* 그것이한다 : 콜백. 이것이 현재 자바 스크립트 구현으로 할 수있는 유일한 길입니다. –

관련 문제