我正在调整render
函数中dataLabels
的一些值,但我需要重新绘制一个图表来应用这些更改。下面是我的render函数:
render: function () {
const points = this.series[0].points;
for (var i = 0; i < points.length; i++) {
if (i < points.length - 1) {
const dataLabel1 = (points[i] as any).dataLabel
const dataLabel2 = (points[i + 1] as any).dataLabel
if ((dataLabel1.x + dataLabel1.width) >= dataLabel2.x) {
dataLabel1.attr({
y: dataLabel1.y - (dataLabel1.height + 2),
fill: points[i].color
});
}
}
}
}
但在图表的宽度改变之前,什么都不会改变。因此,我认为更改需要再次呈现图表才能应用。
我试着这样重新绘制我的图表:
render: function () {
const points = this.series[0].points;
for (var i = 0; i < points.length; i++) {
if (i < points.length - 1) {
const dataLabel1 = (points[i] as any).dataLabel
const dataLabel2 = (points[i + 1] as any).dataLabel
if ((dataLabel1.x + dataLabel1.width) >= dataLabel2.x) {
dataLabel1.attr({
y: dataLabel1.y - (dataLabel1.height + 2),
fill: points[i].color
});
}
}
}
this.redraw();
}
但这会导致无限渲染循环。我如何在这里重新绘制图表,或者是否有其他方法来应用更改?
2条答案
按热度按时间koaltpgm1#
您可以有条件地重绘图表,例如:
但是,你可能不需要这样做。使用
attr
方法作为数据标签应该就足够了,请查看这个示例:https://jsfiddle.net/BlackLabel/tyL96pxd/jaxagkaj2#
我认为你不需要在render函数中调用这个.redraw()。您可以使用数据标签的update方法来调整图表中数据标签的位置和填充颜色,并立即反映这些更改。像这样的东西应该会有用,