gpt4 book ai didi

javascript - 避免 d3 轴标签中的 dx/dy 属性

转载 作者:行者123 更新时间:2023-12-02 16:30:19 27 4
gpt4 key购买 nike

导出 SVG 文件并在 Corel Draw(某些旧版本)中打开它时,我遇到了文本元素位置问题。我通过将每个 dx/dy 属性设置为零并将其值添加到相应的 x/y 属性来修复此问题。

我编写了一个辅助函数,在我使用的每个文本元素上使用 .each 调用该函数。

transformDXYtoXY: function(d, i) {
var that = d3.select(this);

var y = that.attr("y") == null ? 0 : parseFloat(that.attr("y"));
var dy = that.attr("dy") == null ? 0 : parseFloat(that.attr("dy"));
that.attr("y", y + dy);
that.attr("dy", 0);

// doing the same with dx/x
...
},

这工作得很好,直到我决定在输入更改时转换轴而不是重新绘制它们:

axis = d3.svg.axis().scale(someScale);
d3.select('.axis')
.transition()
.call(axis)
.selectAll("text")
.each(transformDXYtoXY);

如果不调用transformDXYtoXY(),刻度标签位置将关闭y/dy 属性没有被设置,即使当我在 transformDXYtoXY() 中检查它时,它看起来没问题。

有没有办法告诉 d3 避免使用dx/dy?看起来问题发生在 transition() 期间。

最佳答案

dxdy 属性的使用是硬编码在 D3 的源代码中的——更改它将是一项巨大的工作。然而,有一个简单的解决方法。 D3 转换允许您设置 listener for the end of the transition 。您可以利用它来运行代码来修复属性值(对现有代码进行最少的更改):

d3.select('.axis')
.transition()
.call(axis)
.selectAll("text")
.each("end", transformDXYtoXY);

为了澄清,您目前拥有的代码在设置转换后立即运行函数来修复属性,然后运行并覆盖属性值。上面的代码在转换完成后运行该函数,即不会发生进一步的属性更改。

关于javascript - 避免 d3 轴标签中的 dx/dy 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28366221/

27 4 0