我们的目的:我们正致力于通过重新定位避免重叠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 以及以下说明)
重新定位仅适用于第一次单击图例项目所显示的系列。如果再次激活和激活同一系列,我们的调整将不再起作用。 (例如,在我们的小提琴中激活series2,您将看到它的第一个dataLabel被移动到顶部30px。但是,取消激活/重新激活series2并且dataLabel不再移动30px到顶部但出现在其标准位置。)
为了调试这种神秘的停用/激活行为,我们在调用.attr()之后将一些信息记录到控制台:seriesName,dataLabel.y,adjY,dataLabel-object。令人惊讶的是,尽管dataLabel.y和adjY值相同,但dataLabel对象本身仍然不受其y属性的影响。
总的来说,我们想知道show事件是否是“更新”dataLabel位置的正确方法。任何经验或建议都是非常受欢迎的。
答案 0 :(得分:2)
我认为这主要是由animations
引起的,禁用它进行调试:http://jsfiddle.net/pbNfz/1/ - 现在效果更好。
另外,请参见similar question。