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

此外,让我更容易的是从功能角度考虑功能。每当标签以'()'结尾时,就意味着您立即调用它。如果用功能结果(或其效果)代替整个位,那么您是否希望在那里发生,然后呢,还是不? –