我见过类似的问题(即使标题相似),但没有一个能提供我需要的答案。
我有一个bar-negative-stack图表,其中包含明细。 为了保持Y轴居中,我正在计算系列中的最大值并将其设置为图表的极值。
事情是我没有找到一个放置这个逻辑的好地方。我已尝试将其置于redraw
或render
个事件上,但由于我正在更改yAxis,因此会导致堆栈溢出。
到目前为止我所做的或多或少有效的是设置drilldown
事件并使用setTimeout
来延迟计算,否则它将在下钻前得到值。我需要一些像drilldownFinish
这样的活动。
这是一个关于这个向下钻取逻辑的工作小提琴(虽然不在负条形堆栈上):http://jsfiddle.net/6qpq78do/
关于如何在没有setTimeout
的情况下执行此操作的任何想法?
谢谢
答案 0 :(得分:0)
最大callstack超出消息是由setExtremes
函数引起的。它的第三个参数是redraw
- 默认为true
:https://api.highcharts.com/class-reference/Highcharts.Axis#setExtremes
因此setExtremes
会再次调用redraw
事件,redraw
事件会调用setExtremes
,依此类推......
此处的解决方案是创建一个标志(redrawEnbaled
),该标志将控制对redrawEvent
中放置的逻辑的访问并阻止此无限递归循环:< / p>
var redrawEnabled = true;
(...)
events: {
redraw: function() {
if (redrawEnabled) {
redrawEnabled = false;
let values = [];
this.series.forEach(s => {
s.yData.forEach(v => values.push(Math.abs(v)));
});
let max = values.reduce((acc, val) => (acc > val) ? acc : val, 0);
this.yAxis[0].setExtremes(-max, max);
redrawEnabled = true;
}
}
}