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

また、私にとっては、その機能の点で機能について考えることがより簡単になったのです。ラベルが '()'で終わると、すぐにそれを呼び出すことになります。その全体のビットを関数の結果(またはその効果)で置き換えた場合、その結果がその場で起こることを望むでしょうか? –

関連する問題