对于Flot,是否有一个事件在用户使用鼠标滚轮完成平移或缩放后触发(在range.xaxis.to / from和range.yaxis.to / from已经解决之后)?在用户平移或放大主图后,我尝试使用下面的行来更新概览图上的选择,但我发现在平移或缩放(而不是两者)之后更新到概览图。 / p>
$("#plot").bind("mouseup scroll",updateOverviewSelection);
提前致谢。
修改:http://jsfiddle.net/apandit/nu2rr58h/9/
在jsfiddle中,我无法在主图中平移,光标似乎没有恢复正常。用户可以在概览图中单击并拖动以进行选择,从而可以放大主图。我还希望能够允许用户平移和放大主图,并更新概览图中的选择框;我试图通过将updateOverviewSelection
方法绑定到滚动和鼠标事件的绘图div来尝试这样做。 Flot中是否会在每次更新x轴和y轴限制时触发事件?
答案 0 :(得分:2)
此问题的解决方案如下。问题是设置概览图的选择(overview.setSelection(ranges);
)是触发缩放方法,因为它被绑定到概览图中的plotselected
事件。在zoom
方法的末尾,绘制了主图,再次调用overview.setSelection(ranges);
方法中的updateOverviewSelection
行。为了防止这两个方法/事件之间的乒乓,我添加了一个updatingOverviewSelection
标志。
http://jsfiddle.net/apandit/nu2rr58h/12/
var datasets = [[
[0,0],[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9]
],
[
[0,0],[-1,-1],[-2,-2],[-3,-3],[-4,-4],[-5,-5],[-6,-6],[-7,-7],[-8,-8],[-9,-9]
]];
var plot = $.plot("#plot",datasets,{
pan: {
interactive: true
},
zoom: {
interactive: true,
mode: "x"
}
});
var overview = $.plot("#overview",datasets,{
selection: {
mode: "xy"
}
});
var updatingOverviewSelection = false;
$("#plot").bind("plotpan plotzoom",updateOverviewSelection);
$("#overview").bind("plotselected", zoom);
function zoom(event,ranges) {
if(updatingOverviewSelection) {
updatingOverviewSelection = false;
}
else {
var options = plot.getOptions();
options.xaxes[0].min = ranges.xaxis.from;
options.xaxes[0].max = ranges.xaxis.to;
options.yaxes[0].min = ranges.yaxis.from;
options.yaxes[0].max = ranges.yaxis.to;
plot = $.plot("#plot",datasets,options);
}
};
// get the window x-axis and y-axis ranges for the main plot
// and set the selection in the overview plot to those ranges
function updateOverviewSelection(event) {
var options = plot.getOptions();
var ranges = {
xaxis: {
from: options.xaxes[0].min,
to: options.xaxes[0].max
},
yaxis: {
from: options.yaxes[0].min,
to: options.yaxes[0].max
}
};
updatingOverviewSelection = true;
overview.setSelection(ranges);
};