与显示div的画布none none none :)

问题描述:

我有一个画布元素的问题。它不显示它何时处于隐藏div并且div被切换。更好的解释和示例这里与显示div的画布none none none :)

http://jsfiddle.net/78sJT/10/

这是发生在FF和铬(未测试等)。谁能告诉我为什么/如何克服这个问题。

问题是,dygraphs检测div的宽度/高度为0/0,并且直到重绘为止(在调整单个DOM元素时没有发生JS事件)时才会学习。

最简单的解决方法是只明确地让dygraph知道它应该更新其大小和重绘自己的股利是用切换后g.resize();

$(document).ready(function(){ 
     $('.click').click(function(){ 
     $('#hidden').toggle(); 
     g.resize(); 
     }); 
    }); 

我更新您的jsfiddle http://jsfiddle.net/78sJT/13/

+0

谢谢,这一直让我发疯。我只需要找出一种方法来做到这一点,因为我正在动态生成图表,并且不知道“g”实际上是什么。 – dogmatic69

+1

明白它的工作原理,对于正在动态查看的人,我正在使用html5数据属性,并以http://codepad.org/CmHHo0iG结束 – dogmatic69

我正好碰到这个问题在Chrome 37.0.2062.124米,匹配在OP的问题中描述的问题。但是我没有使用任何特定的图形库,只是绘制到画布。当封闭的DIV尺寸发生变化时,我已经重新绘制了画布。

我发现如果一个画布的宽度或高度设置为零,它变得不可靠。下次将宽度和高度设置为非零值时,即使其宽度和高度现在都不为零,并且可以在元素树中查看(并且hover-在Chrome的调试器中突出显示)。

所以除了建议在benni_mac_b的答案,你必须:

  • 使用setTimeout或类似的延迟在画布上绘画,所以你不要设置宽度/高度后,立即做,或
  • 确保您从未将画布设置为零宽度/高度。确保它至少有1个像素。

我为了简单而做了后面的工作,它解决了这个问题。

总结:

刚刚从(0,0)成长为(1000,1000)画布不能马上得出 - 它会忽略所有的绘图指令。但是,如果它刚刚从(1,1)增长到(1000,1000),您可以立即使用它。