2017-10-10 16 views
1

데이터 세트간에 변경하는 데 사용되는 한 쌍의 단추가있는 HighMap이 있습니다. 이는 의도 한대로 작동합니다. 데이터 세트 간의 전환이 원활 해 지도록 페이드를 추가하고 싶었습니다. 그러나 페이드 아웃 콜백 기능 내에서도 맵은 페이드 아웃이 완료되기 전에 데이터를 업데이트하는 것처럼 보입니다.Highmaps를 사용하면 페이드를 완성하기 전에 내 jQuery 페이드 인의 콜백이 왜 발생합니까?

var resetMap = function(dataCurrent) { 
SetOptions(dataCurrent); 
AccessMap.update({title: {text: dataTitle}}); 
AccessMap.update({colorAxis: {max: dataMax, min: dataMin, minColor: dataMinColor, maxColor: dataMaxColor,type: dataScale}}); 
AccessMap.update({series:[{name: dataTitle,tooltip:{ valueSuffix: dataTooltipSuffix}}]}); 
AccessMap.series[0].setData(dataCurrent.slice()); 
}; 

$('#setdataPop').click(function() { 
$("#container").fadeOut(500,resetMap(pop)); 
$("#container").fadeIn(500); 
}); 

$('#setdataRate').click(function() { 
$("#container").fadeOut(500,resetMap(rate16)); 
$("#container").fadeIn(); 
}); 

(즉, 코드에서 참조 setOptions을 기능을 포함) 내 전체 작업지도의 단순화 된 버전은 여기에 있습니다 : :

https://jsfiddle.net/MossTheTree/h5njdqLf/3/

여기에 버튼 코드 관련 비트입니다

답변

1

함수 참조를 전달하지 않고 resetMap을 제자리에 실행 중입니다. 콜백 내에서 fadeIn도 실행하고 싶을 수도 있습니다.

$("#container").fadeOut(500, function() { 
    resetMap(pop); 
    $("#container").fadeIn(500); 
}); 
+0

완벽하게 고맙습니다. 그 차이점을 완전히 이해하기 위해서는 더 많은 것을 읽어야 할 것입니다. 콜백 함수를 직접 호출하지 말고 함수를 정의해야합니다. – Moss

+0

그 기능의 부작용을 즉시 원하지 않으므로 직접 호출하지 마십시오. 애니메이션은 사실상 비동기 적이기 때문에 언젠가는 미래에 끝납니다. jQuery를 사용하면 애니메이션이 끝나면 어떻게되는지 정의 할 수 있습니다. 따라서 jQuery에 함수에 대한 참조를 제공하려는 이유가 있기 때문에 애니메이션을 마칠 때 호출 할 수 있습니다. 직접 호출하지 않고 호출 할 수 있습니다. –

+0

또한, 나를 쉽게 만드는 것은 효과에 대한 관점에서 기능을 생각하는 것입니다. 레이블이'()'로 끝날 때마다 즉시 레이블을 호출한다는 의미입니다. 그 전체 비트를 함수 결과 (또는 그 효과)로 대체하면, 바로 그 다음에 또는 그 다음에 일어나기를 원할까요? –