2017-10-10 102 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

此外,讓我更容易的是從功能角度考慮功能。每當標籤以'()'結尾時,就意味着您立即調用它。如果用功能結果(或其效果)代替整個位,那麼您是否希望在那裏發生,然後呢,還是不? –