我已经阅读了关于如何使用Highcharts.SVGRenderer
创建自定义SVG文本等的各种示例。然而,我想知道创建和清理它们的正确做法是什么?
目前,我在events.redraw
钩子上制作它们(因为我想根据动态数据更新SVG文本(,但看起来redraw
钩子在各种场合被多次调用(看起来它会在添加序列和数据时重新绘制(,然后SVG就没有被清理。。。所以我最终在图表中拥有了相同SVG元素的多个副本。任何子序列的重新绘制显然都会在图表中添加更多的SVGE元素。
问题:
- 我是否需要自己跟踪所有生成的SVGE元素,并在每次重新绘制它们时手动调用destroy((
- Highcharts中是否有任何内部跟踪器可以使用
SVGRenderer
跟踪创建的SVG?(这样我就可以使用内部裁判来调用destroy了( - 如果我不应该在重绘事件中绘制它们,那么在我需要对生成的SVG元素进行动态更新的地方,建议使用什么钩子来绘制我的SVG元素
- 我是否绝对需要跟踪我自己对SVG元素的引用?做这件事似乎有点太费事了
-
是的,您需要跟踪所有生成的SVG元素,您希望更新这些元素,但更新它们的属性比销毁它们更好。
-
不,没有这样的跟踪器。
-
您可以在
load
事件中绘制元素,并在需要时(例如更改数据时(重新绘制它们。 -
不,您必须只跟踪那些需要更新的元素。也许你的一些问题会通过注释来解决?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