2013-07-20 3 views
1

Легенда для моего графика возникает только при возникновении события plotpan. Вот моя updateLegend функции находится ниже которой я уверен, что программа идет в конечно с помощью трассировки сообщенийFlot: Legend обновляется только при возникновении события 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, но я не считаю, что это на самом деле изменения содержимого легенды дел. Тем не менее, он обновляется при панорамировании, потому что это заставляет перерисовать сетку (которая перерисовывает легенду).

Самое простое исправить - вызвать 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, но это может помешать рисованию внутренних легенд флотов. Если вы действительно хотите показать ближайшую точку позиции, возможно, оставите легенду в покое и сделайте это самостоятельно.

Наконец, я не совсем уверен, где вы собираетесь со всеми этими setTimeout. Похоже на осложнение, и вы можете немного упростить это.

Обновление fiddle.

+0

Тайм-ауты необходимы, что я показал вам, это была тонированная версия того, над чем я работаю. Я должен был более тщательно изучить, что это за линия, я работал с примера Flot с динамической легендой и копировал эту строку оттуда. – Louis93

Смежные вопросы