dygraphs div 在浏览器检查 window 打开或浏览器调整大小之前不可见

dygraphs div not visible until browser Inspection window opened or browser resize

这个困扰了我一个星期,只好来SO了。 (请原谅 URL,这是一个开发服务器)。 http://www.stagestudio.com.ua/shutter_stat/wiev_base.php?cat=34

当我点击照片时,应该会出现带有折线图的弹出窗口,但实际上折线图是不可见的。只有在调整 window 或打开浏览器检查 window.

后才能看到

我该如何解决这个问题?

此方法无效<script> var graph = new Dygraph(document.getElementById("graphPanel"), "temperatures.csv", { animatedZooms: true }); $(document).ready(function () { graph.resize(800, 500) }); </scrip>

这是一个known issue that comes up不时。如果 <div> 是不可见的,那么它没有任何明确定义的高度或宽度。所以在其中渲染图表没有任何用处(它的高度为零)。 dygraphs 无法知道图表 <div> 已经可见。这真是DOM事件API的差距。 Google 地图等其他库也有类似问题。

解决方法是:

  • 您可以不带任何参数调用.resize()来在弹出窗口出现时强制重绘。
  • 您可以在弹出窗口出现时创建图表,而不是在页面加载时创建。这样,图表 <div> 将在呈现图表时具有大小。
  • 您可以在 dygraphs 构造函数中或作为图表上的样式显式指定高度和宽度 <div>
 // These will be zero if the dygraph's div is hidden. In that case,
  // use the user-specified attributes if present. If not, use zero
  // and assume the user will call resize to fix things later.
  this.width_ = div.clientWidth || attrs.width || 440;
  this.height_ = div.clientHeight || attrs.height ||320;