2013-07-20 56 views
1

只有發生plotpan事件時,纔會出現圖形的圖例。這裏是我的發現updateLegend功能如下我確信程序進入的過程中使用跟蹤消息Flot:只有在plotpan事件發生時才更新圖例?

然而,唯一的時間了傳說中的更新,因爲我包含在plotpan功能,是一個plotpan發生之後。我不確定是什麼導致了這一點,因此我無法解決這個問題。 Here is the JSFiddle that will be more helpful than the following isolated segment of code.

var updateLegendTimeout = null; 
var latestPosition = null; 
function updateLegend(){ 
     var series = (plot.getData())[0]; 
     legends.eq(0).text(series.label ="x: " + (local_x)+" y: "+ (local_y)); 
} 


placeholder.bind("plothover", function (event, pos, item) { 
if (item){ 
    local_x = item.datapoint[0].toFixed(2); 
     local_y = item.datapoint[1].toFixed(2); 
    console.log("x:" + local_x + ", " + "y:" + local_y); 
} 

if (!updateLegendTimeout){ 
    updateLegendTimeout = setTimeout(updateLegend, 50); 
     updateLegendTimeout = null; 
} 
}); 

回答

3

這行代碼準備做什麼?

legends.eq(0).text(series.label ="x: " + (x)+" y: "+ (y)); 

這似乎是分配series.label,但我不認爲它實際上是修改傳奇div的內容。但是,當您平移時它會更新,因爲這會強制重繪網格(重繪圖例)。

最簡單的修復方法是在更改圖例後手動調用setupGrid

function updateLegend(x,y){ 
    var series = (plot.getData())[0]; 
    var legends = $(placeholder_id+ ".legendLabel"); 
    series.label ="x: " + (x)+" y: "+ (y); 
    plot.setupGrid(); 
    clearTimeout(updateLegendTimeout); 
} 

雖然(每次鼠標移動重新繪製網格),但這是相對昂貴的。另一種攻擊方式是手動設置圖例div的文本,但這可能會干擾flots內部圖例的繪製。如果你真的想顯示最近的點位置,也許離開傳奇一個人,並在你自己的div。

最後,我不太清楚你在哪裏與所有那些setTimeout。似乎對我來說過於複雜,你可以簡化這一點。

更新fiddle

+0

超時是必要的,我告訴你的是我正在努力的一個淡化版本。我應該仔細看看那條線是幹什麼的,我從Flot的例子中用一個動態的圖例來工作,然後從那裏複製那條線。 – Louis93

相關問題