关于使用Highcharts.SVGender创建/销毁HighchartsSVG元素的问题



我已经阅读了关于如何使用Highcharts.SVGRenderer创建自定义SVG文本等的各种示例。然而,我想知道创建和清理它们的正确做法是什么?

目前,我在events.redraw钩子上制作它们(因为我想根据动态数据更新SVG文本(,但看起来redraw钩子在各种场合被多次调用(看起来它会在添加序列和数据时重新绘制(,然后SVG就没有被清理。。。所以我最终在图表中拥有了相同SVG元素的多个副本。任何子序列的重新绘制显然都会在图表中添加更多的SVGE元素。

问题:

  • 我是否需要自己跟踪所有生成的SVGE元素,并在每次重新绘制它们时手动调用destroy((
  • Highcharts中是否有任何内部跟踪器可以使用SVGRenderer跟踪创建的SVG?(这样我就可以使用内部裁判来调用destroy了(
  • 如果我不应该在重绘事件中绘制它们,那么在我需要对生成的SVG元素进行动态更新的地方,建议使用什么钩子来绘制我的SVG元素
  • 我是否绝对需要跟踪我自己对SVG元素的引用?做这件事似乎有点太费事了
  1. 是的,您需要跟踪所有生成的SVG元素,您希望更新这些元素,但更新它们的属性比销毁它们更好。

  2. 不,没有这样的跟踪器。

  3. 您可以在load事件中绘制元素,并在需要时(例如更改数据时(重新绘制它们。

  4. 不,您必须只跟踪那些需要更新的元素。也许你的一些问题会通过注释来解决?https://www.highcharts.com/docs/advanced-chart-features/annotations-module


events: {
render: function() {
var chart = this,
series = chart.series[0],
x = series.points[2].plotX,
y = series.points[2].plotY - 50;
if (!chart.customElement) {
chart.customElement = chart.renderer.text().add();
}
chart.customElement.attr({
text: 'some text ' + Math.random(),
x,
y
});
}
}

现场演示:http://jsfiddle.net/BlackLabel/t250crx1/

API参考:https://api.highcharts.com/class-reference/Highcharts.SVGElement#attr

最新更新