Javascript 当Flot图的包含div更改大小时,如何调整Flot图的大小

Javascript 当Flot图的包含div更改大小时,如何调整Flot图的大小,javascript,jquery,resize,flot,liquid-layout,Javascript,Jquery,Resize,Flot,Liquid Layout,我正在使用Flot graphing library jQuery插件,但在包含更改大小(例如,由于窗口大小调整)时,我还没有找到一种处理调整图形大小的好方法。在处理onresize事件时,我已确保将包含的的宽度和高度更新为正确的大小,然后尝试调用setupGrid和plot对象上的draw,但没有效果。我在删除和读取包含的文件并在其中重新填充图形的方法上取得了一些成功。但是,如果我必须同时向文档中添加其他元素(如图形的工具提示),这似乎很容易陷入无限调整大小事件循环中,因为我猜这些元素也会触发

我正在使用Flot graphing library jQuery插件,但在包含
更改大小(例如,由于窗口大小调整)时,我还没有找到一种处理调整图形大小的好方法。在处理onresize事件时,我已确保将包含的
的宽度和高度更新为正确的大小,然后尝试调用setupGrid和plot对象上的draw,但没有效果。我在删除和读取包含
的文件并在其中重新填充图形的方法上取得了一些成功。但是,如果我必须同时向文档中添加其他
元素(如图形的工具提示),这似乎很容易陷入无限调整大小事件循环中,因为我猜这些元素也会触发调整大小事件?有什么好办法来处理我错过的事情吗


(我还在IE上使用ExplorerCanvas,以便能够使用Flot,如果这可能与此有关的话。我还没有在任何其他浏览器中真正尝试过)

我似乎找到了一个解决方案,尽管我不完全确定为什么它会起作用。我仍然在使用从文档中删除并读取包含
的内容并在其中重新填充图形的方法。然而,我以前一直在做什么

window.onresize = redrawFunc;  //redrawFunc removes and readds the containing div and replots
这似乎很容易进入一个无限循环,这取决于重绘Func对文档所做的操作

相反,我尝试使用jQuery的调整大小绑定

$(window).resize = redrawFunc;

到目前为止,无论我在redrawFunc中对文档做了什么其他更改,我都没有遇到这种方法陷入循环的问题。我只是不知道为什么。

我发现绑定到窗口上的调整大小事件并调用plot效果非常好。例如,我的数据和选项存储在页面上的变量中。然后,我在$(document.ready()上设置它:

$(窗口).resize(函数(){$.plot($('#graph_div')、数据、选项);})


我自己刚刚找到了解决办法。我已经结束了对
$.plot()
的调用,因此这可能是我特定问题的原始原因,但flot拒绝及时调整大小,即使在我使用jQuery
resize
事件时也是如此。以下是我的代码更改,它修复了所有问题:

$(window).resize(function() {
    // erase the flot graph, allowing the div to shrink correctly
    $('#graph_div').text(''); 

    // redraw the graph in the correctly sized div
    $.plot($('#graph_div'), data, opts);
});
最新版本的文档至少描述了一个调整大小的事件,该事件与广告中的一样有效

调整大小()

告诉Flot将绘图画布调整为 占位符。之后您需要运行setupGrid()和draw(),如下所示 画布大小调整是一种破坏性操作。这是用来 内部由resize插件进行调整


最简单的方法是使用resize插件。这里演示了:

但你只要加上

<script language="javascript" type="text/javascript" src="../../jquery.flot.resize.js"></script>


下面是他们网站上的一个工作示例:我实际上喜欢你这样做的方式。它也消除了调整大小插件的需要。我注意到的唯一缺点是在调整尺寸时会有轻微抖动,但没有什么大问题。谢谢<代码>plot.resize();plot.setupGrid();plot.draw()适用于我的绘图位置:
var plot=$.plot($(“#graph_div”)、数据、选项