Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取元素相对于封闭svg的坐标_Javascript_D3.js_Svg - Fatal编程技术网

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

Javascript 获取元素相对于封闭svg的坐标,javascript,d3.js,svg,Javascript,D3.js,Svg,我有一个包含元素和元素组的SVG。我想得到一个封闭元素相对于外部SVG的坐标。 目前我使用的是document.getElementById(elementid).getBBox().y,它总是返回0。使用jQuery,您可以这样做:var offset=svg.offset()(提供svg的绝对位置),然后var pos=elem.offset()提供元素的绝对位置。从一个中减去另一个。这里svg是jQuery('svg'),例如,elem可能是jQuery('#idOfElement') 我

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

使用jQuery,您可以这样做:
var offset=svg.offset()
(提供svg的绝对位置),然后
var pos=elem.offset()
提供元素的绝对位置。从一个中减去另一个。这里svg是jQuery('svg'),例如,elem可能是jQuery('#idOfElement')

我懒得做香草JS,而且我也不推荐使用它。jQuery正在尝试跨浏览器,offset在所有浏览器实现中都能很好地工作

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

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


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

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


嗨,妈妈!
var rect=document.getElementById(“myText”).getBoundingClientRect();
控制台日志(“位置为“+rect.top+”,“+rect.left”);

getBBox
将不考虑元素或父元素上的任何转换。我相信只有当SVG本身没有缩放,并且定位在0,0时,您才想使用它。否则坐标将映射到屏幕的角落,而不是SVG@InfernalRapture如果SVG不在(0,0),是否有一种解决方案可以工作?@Crashalot如果您需要SVG空间中的特定坐标,那么我建议编写一个帮助函数来执行矩阵变换。这是一个5行程序,希望在某个时候他们能为它编写一个方便的方法。如果您需要DOM空间中的坐标,这就是getBoundingClientRect()提供给您的(例如,如果您定位的是绝对DOM元素)@InfernalRapture谢谢!这些坐标是相对于父SVG元素还是相对于根SVG元素?再次感谢。@Crashalot它是相对于作为“SVG”参数传递给帮助程序的SVG元素的。因此,如果要使用基本SVG,请传递该消息。如果你想把它作为一个函数的子函数,你可以传递它,你会得到相对于它的坐标。