highcharts在回流后没有响应

我正在设置一个专门的打印按钮。 页面很复杂,需要一些预处理才能发送到window.print()。

我现在有Highcharts代码。 它正确调整页面上的图表大小,然后,在打印后,它将它们调整为原始大小。

问题是,从那时起,图表将不会响应Media Query更改。 该站点是响应式的,基于Bootstrap构建,因此这不是function结果。

如何更改图表大小,但让它能够响应媒体查询?

我使用的代码是:

设置代码

var saveChartContainerWidth = $('.highcharts-container').css('width'); var saveChartContainerWidthSVG = saveChartContainerWidth.slice(0, -2); $('.highcharts-container').css('width', '690px'); $(Highcharts.charts).each(function(i,chart){ var height = chart.renderTo.clientHeight; var width = 690; // chart.renderTo.clientWidth; chart.setSize(width, height); chart.reflow(); }); 

印后打印拆解代码

  $('.highcharts-container').css('width', saveChartContainerWidth); $(Highcharts.charts).each(function(i,chart){ var height = chart.renderTo.clientHeight; var width = saveChartContainerWidthSVG; chart.setSize(width, height); chart.reflow(); }); 

在@ Ryan的链接以及同事的评论的帮助下,我尝试了许多解决方案,虽然不起作用,但让我更接近。

然后我更好地了解了要寻找什么,我终于找到了这个答案Highcharts + Bootstrap .table-responsive问题 ,它提供了一个关键因素。

这两个键是:

  1. 不要在SVG本身或直接Highchart的容器上设置大小。 (我把它设置在一个更高的Div级别上。)

  2. 触发$(窗口).trigger(“resize”); 事件。

这适用于所有经过测试的浏览器(Firefox,Chrome,IE 9 – 11)。

—————–最终守则———————–

 // Setup $('.chart-container').css('width', '690px'); $(window).trigger("resize"); // Teardown $('.chart-container').css('width', ''); $(window).trigger("resize"); 

设置尺寸后执行此操作即可。

  window.onresize = () => { chart.setSize($('parentElement').offsetWidth, height) chart.reflow() } 

但是,如果将onresize函数更改为其他内容,则可能无效。 所以这更像是一个快速的解决方案,但它完美无缺