【发布时间】:2014-10-09 21:28:41
【问题描述】:
我的画布元素有问题。当它在隐藏的 div 中并且 div 被切换时,它不会显示。更好的解释和例子在这里
这发生在 ff 和 chrome 中(未测试其他)。谁能告诉我为什么/如何克服这个问题。
【问题讨论】:
标签: javascript css html canvas
我的画布元素有问题。当它在隐藏的 div 中并且 div 被切换时,它不会显示。更好的解释和例子在这里
这发生在 ff 和 chrome 中(未测试其他)。谁能告诉我为什么/如何克服这个问题。
【问题讨论】:
标签: javascript css html canvas
问题在于 dygraphs 将 div 的宽度/高度检测为 0/0,并且在重新绘制之前不会学习其他情况(调整单个 DOM 元素大小时不会触发 JS 事件)。
最简单的解决方法是明确地让 dygraph 知道它应该在使用 g.resize(); 切换 div 后更新其大小并重绘自身
$(document).ready(function(){
$('.click').click(function(){
$('#hidden').toggle();
g.resize();
});
});
我更新了你的 jsfiddle http://jsfiddle.net/78sJT/13/
【讨论】:
我刚刚在 Chrome 37.0.2062.124 m 中遇到了这个问题,与 OP 问题中描述的问题相匹配。但是我没有使用任何特定的图形库,只是绘制到画布上。当封闭 DIV 的大小发生变化时,我已经在重新绘制画布了。
我发现如果将画布的宽度或高度设置为零,它就会变得不可靠。下次您将宽度和高度设置为非零值时,您立即对其进行的任何绘制都将被忽略,即使它的宽度和高度现在非零并且可以在元素树中看到(并且悬停-在页面中突出显示)在 Chrome 的调试器中。
因此,除了 benni_mac_b 的回答中的建议之外,您还必须:
setTimeout或类似的方式来延迟在画布上绘制,所以你不要在设置宽度/高度后立即这样做,或者为了简单起见,我做了后者,它解决了问题。
总结:
刚刚从 (0, 0) 增长到 (1000, 1000) 的画布无法立即绘制 - 它会忽略所有绘图指令。但如果它刚刚从 (1, 1) 增长到 (1000, 1000),您可以立即利用它。
【讨论】: