获取元素相对于封闭svg的坐标

时间:2016-03-19 14:58:39

标签: javascript d3.js svg

我有一个包含元素和元素组的SVG。我想获得相对于外部SVG的封闭元素的坐标。 目前我正在使用document.getElementById(elementid).getBBox().y,它总是返回0。

2 个答案:

答案 0 :(得分:2)

正如我在评论中所说,您可以使用getBoundingClientRect



<!DOCTYPE html>
<html>

  <head>
  </head>

  <body>
    <svg width="500" height="500">
      <g transform="translate(100,100)rotate(45)">
        <text id="myText" x="10" y="10" style="fill:red">Hi Mom!</text>
      </g>
    </svg>
    <script>
      var rect = document.getElementById("myText").getBoundingClientRect();
      console.log("position is " + rect.top + "," + rect.left);
    </script>
  </body>

</html>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

使用jQuery,你可以这样做:var offset=svg.offset()(给你svg的绝对位置),然后是var pos=elem.offset(),它给你元素的绝对位置。从另一个中减去一个。这里svg是jQuery(&#39; svg&#39;),也许elem是jQuery(&#39;#idOfElement&#39;)。例如。

我懒得做香草JS比特,我也不建议使用它。 jQuery试图跨浏览器,并且偏移在所有浏览器实现上都能很好地工作。

此外,您可以尝试利用浏览器位置系统并将svg的位置设置为“相对”,然后elem.position()将为您提供相对于第一个绝对父元素的位置有相对或绝对的位置。

.svg { position: relative } 要么 $('svg').css({position:'relative'})

然后$('#myElemId').position()为您提供坐标。