【发布时间】:2011-08-15 14:42:08
【问题描述】:
我正在尝试通过 java 脚本获取 SVG 中矩形的屏幕像素坐标。 单击矩形后,我可以使用 getBBox() 计算出它的宽度、高度、x 和 y 位置。
但这些位置是原始位置。我想要屏幕位置。
例如,如果我操作整个 SVG 的 viewBox,这些 getBBox 坐标与屏幕像素不再相同。有没有获得的功能或方法 考虑当前 viewBox 和 svg 元素像素大小的坐标?
【问题讨论】:
标签: javascript svg
我正在尝试通过 java 脚本获取 SVG 中矩形的屏幕像素坐标。 单击矩形后,我可以使用 getBBox() 计算出它的宽度、高度、x 和 y 位置。
但这些位置是原始位置。我想要屏幕位置。
例如,如果我操作整个 SVG 的 viewBox,这些 getBBox 坐标与屏幕像素不再相同。有没有获得的功能或方法 考虑当前 viewBox 和 svg 元素像素大小的坐标?
【问题讨论】:
标签: javascript svg
var svg = document.querySelector('svg');
var pt = svg.createSVGPoint();
function screenCoordsForRect(rect){
var corners = {};
var matrix = rect.getScreenCTM();
pt.x = rect.x.animVal.value;
pt.y = rect.y.animVal.value;
corners.nw = pt.matrixTransform(matrix);
pt.x += rect.width.animVal.value;
corners.ne = pt.matrixTransform(matrix);
pt.y += rect.height.animVal.value;
corners.se = pt.matrixTransform(matrix);
pt.x -= rect.width.animVal.value;
corners.sw = pt.matrixTransform(matrix);
return corners;
}
洋红色方块是 HTML 元素中绝对定位的 div,使用屏幕空间坐标。当您拖动或调整矩形大小时,调用此函数并将角 div 移动到四个角上(第 116-126 行)。请注意,即使矩形处于任意嵌套转换(例如蓝色矩形)并且 SVG 被缩放(调整浏览器窗口的大小),这仍然有效。
为了好玩,将其中一个矩形拖离 SVG 画布的边缘,并注意屏幕空间的角落停留在看不见的点上。
【讨论】:
您还可以检查elm.getScreenBBox() 方法是否存在,这听起来像。它在SVG Tiny 1.2 中定义。
See the files here,其中包括应在所有浏览器中工作的getScreenBBox 的后备实现。
【讨论】: