Highcharts-SetState(不活动)在重绘后不起作用

问题描述 投票:1回答:1

考虑以下玩具示例:jsfiddle

 chart: {
    events: {
      render: myfunc
    }
  },

...

function myfunc() {
  var chart = this;

  chart.series.forEach(function(s) {
    s.setState('inactive', true);
  });
  chart.series[0].setState('hover');
}

预期的行为是在loadredraw事件之后,将第一个系列的状态设置为hover,同时将所有其他系列的状态设置为inactive

  1. 代码在load之后按预期工作
  2. 但是,它在重新绘制
  3. 之后不起作用(通过选择框)。在框中选择一个选项后,除非先前已悬停任何序列,否则该序列将显示为normal而不是inactive。也就是说,如果您与任何系列进行交互,然后在框中选择一个选项,则该代码有效,但如果在加载后立即在该系列中进行交互而没有在该系列中进行交互,则在框中选择一个选项,则该代码不起作用。

    令人惊讶的是,在控制台中进行了一些检查之后,我注意到在任何情况下,预期状态都已正确传递给series对象。 所以,为什么状态不能正确显示?

*注意:在我的实际应用中,hovered系列不一定是第一个,但是它会根据其他函数的输出而变化。我知道在当前示例中可以简化“ myfunc

”,但是出于一般目的,请提出一个尽可能保持基本结构的答案。

请考虑以下玩具示例:jsfiddle chart:{events:{render:myfunc}},... function myfunc(){var chart = this; chart.series.forEach(函数(s.setState(...

highcharts
1个回答
0
投票

这似乎与HighChart的GitHub的issue有关。就您而言,HighCharts正在正确更新系列的状态。但是,在渲染时,它无法设置与'inactive'状态关联的正确不透明度值。 解决方法是将系列的不透明度明确设置为],将其设置为在'inactive'状态下应具有的相同值。

// F U N C T I O N   S E T   S T A T E
function myfunc() {
  var chart = this;

  chart.series.forEach(function(s) {
    //explicit opacity
    s.opacity = 0.2;
    s.setState('inactive', true);
  });
  chart.series[0].setState('hover');
}
© www.soinside.com 2019 - 2024. All rights reserved.