【发布时间】:2019-02-21 04:32:30
【问题描述】:
此 HTML 包含 SVG:
<div class="container">
<div class="spacer"></div>
<svg>
<g id="polygonGroup" transform="translate(80, 50)">
<polygon points="-60,-10 -35,-30 -10,-10 -10,30 -60,30"></polygon>
<polygon points="10,-10 35,-30 60,-10 60,30 10,30"></polygon>
<polygon class="origin" points="-4,0 0,4 4,0 0,-4"></polygon>
</g>
<g id="textGroup" transform="translate(80, 50)">
<text x="-35" y="10">Text</text>
<text x="35" y="10">Text</text>
</g>
</svg>
</div>
还有这个简单的 jQuery 点击事件处理程序:
function clicked(event) {
console.log(event.offsetX, event.offsetY);
}
$('svg').click(clicked);
如此处所示:https://jsfiddle.net/1ht0L8y6/6/ 在不同的浏览器中具有不同的行为:
Chrome:坐标基于 SVG 元素的左上角,无论我在 SVG 内的哪个位置单击。这是我想要的行为。
Firefox:坐标基于我所在元素的左上角,可能是 SVG、多边形或文本。
IE 和 Edge:
- 在 SVG 但不在其任何子元素中时,坐标 基于 SVG 元素。
- 在多边形中时,坐标为
基于
<g>组的原点及其translate偏移量 (即黑色钻石)。负坐标是可能的, 与 Chrome 或 Firefox 不同。 - 我观察到了不同的行为 这些浏览器中的文本元素:它们会根据 文本元素的底部中间。但我无法做到 在小提琴中重现这个;在小提琴文本元素的行为 与这些浏览器中的多边形相同。
什么是可靠的跨浏览器获取点击坐标的方法?
【问题讨论】:
-
我可以重现您的问题,但恐怕需要比我现在更多的时间来回复它。你可以试试这个 SO 答案:stackoverflow.com/a/30708924/3330613
标签: javascript jquery svg click dom-events