javascript - SVG 文本(带 tspan)垂直偏移

标签 javascript d3.js svg

我正在尝试围绕 <text> 绘制一个矩形与多个<tspans> (每个都有 dy=1em )。

我正在使用textElement.getBoundingClientRect()找到文本的大小,然后更新我的rect的属性因此。我面临的问题是 <text> 的垂直偏移元素本身:

weird offset

无论发生什么,这似乎都存在 alignment-baseline我正在使用(下面的示例中的 middle)。

代码如下:

var translate = function(x, y) {
  return 'translate(' + x + ',' + y + ')';
};

var bbox = d3.select('#stuff')
  .node().getBoundingClientRect();
d3.select('#text-container').append('rect')
  .attr({
    width: bbox.width,
    height: bbox.height
  });
d3.select('#stuff').attr('transform',
  translate(bbox.width / 2, 0)
);
d3.select('#middle').attr('transform',
  translate(0, (bbox.height / 2))
).attr('x2', bbox.width);
text {
  alignment-baseline: middle;
  text-anchor: middle;
}
#text-container rect {
  fill: red;
  opacity: 0.2;
}
tspan {
  alignment-baseline: middle;
  text-anchor: middle;
  font-size: 20;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>

<svg width='400' height='900'>
  <g transform='translate(100,100)' id='text-container'>
    <circle cx=0 cy=0 r=3 fill="red"></circle>
    <line x1=0 x2=100 y1=0 y2=0 stroke="green" id="middle"></line>
    <text id='stuff'>
      <tspan dy=1em x=0>where</tspan>
      <tspan dy=1em x=0>is</tspan>
      <tspan dy=1em x=0>this</tspan>
      <tspan dy=1em x=0>offset</tspan>
      <tspan dy=1em x=0>coming</tspan>
      <tspan dy=1em x=0>from?</tspan>
    </text>
  </g>
</svg>
<p id="info"></p>

谢谢!

最佳答案

使用getBBox:

var bbox = text.node().getBBox();

看看这个示例:https://bl.ocks.org/mbostock/1160929 。 Mike使用.getBBox(获取边界框)

这里是你的工作代码:https://jsfiddle.net/dm9du4L6/

关于javascript - SVG 文本(带 tspan)垂直偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38000526/

相关文章:

javascript - 错误: <path> attribute d: expected number - when trying to build a line chart with D3

animation - SVG 从中心点而不是左上角缩放动画

javascript - Raphaël - transformPath() 返回直线而不是曲线

javascript - 如何从 $ ('input[name=...]' )[...] 获取 $ ('form' ).value();

javascript - 如何检测需要滚动的元素主体或html

javascript - 使用 jquery 动态改变背景颜色

javascript - 如何 reshape 现有 JSON 以适应 Highcharts

javascript - 在 javascript 中 eval 的替代用法

javascript - 在 D3 V4 中添加自定义画笔 handle ?

javascript - 在 D3 中重新绘制/刷新图表