Highcharts在hide / show事件上定位dataLabels

时间:2013-12-09 13:50:53

标签: highcharts hide show

我们的目的:我们正致力于通过重新定位避免重叠dataLabels的函数。这样做我们在show事件更新dataLabel位置时遇到问题。为了说明我们的问题,我们提供了一个简化的示例,其中的函数将每个可见系列的第一个dataLabel重新定位到顶部(y方向)30px。重新定位函数由show事件触发。

... function adjustLables(chart, visibleIndex) {
console.log('dataLabels');
for (var i = 0; i < visibleIndex.length; i++) {

    var index = visibleIndex[i],
        dataLabel = chart.series[index].points[0].dataLabel,
        adjY = dataLabel.y - 30;

    chart.series[index].points[0].dataLabel.attr({
        y: adjY
    });
    console.log(chart.series[index].name, 'dataLabel.y:', dataLabel.y, ', adjY:', adjY, dataLabel);

};
console.log('\n');
}; ...

我们的问题: 虽然我们的函数通过应用.attr({y:adjY})来调整dataLabel.y属性,但dataLabel对象的行为并不像我们预期的那样。

例如:( see fiddle 以及以下说明)

  1. 重新定位仅适用于第一次单击图例项目所显示的系列。如果再次激活和激活同一系列,我们的调整将不再起作用。 (例如,在我们的小提琴中激活series2,您将看到它的第一个dataLabel被移动到顶部30px。但是,取消激活/重新激活series2并且dataLabel不再移动30px到顶部但出现在其标准位置。)

  2. 为了调试这种神秘的停用/激活行为,我们在调用.attr()之后将一些信息记录到控制台:seriesName,dataLabel.y,adjY,dataLabel-object。令人惊讶的是,尽管dataLabel.y和adjY值相同,但dataLabel对象本身仍然不受其y属性的影响。

  3. 总的来说,我们想知道show事件是否是“更新”dataLabel位置的正确方法。任何经验或建议都是非常受欢迎的。

1 个答案:

答案 0 :(得分:2)

我认为这主要是由animations引起的,禁用它进行调试:http://jsfiddle.net/pbNfz/1/ - 现在效果更好。

另外,请参见similar question