它可以像Chrome和MSIE中預期的那樣工作。出於某種原因,事件觸發內部矩形元素以及SVG元素(我認爲)。這裏是醬(這是整個頁面):爲什麼在Firefox中閃爍?
<html>
<body>
<svg width="400" height="400" style="overflow: hidden; border: 1px solid gray" id="mySVG">
<rect x="10" y="10" width="100" height="100" fill="red" id="myRect"></rect>
</svg>
<script>
svg = document.getElementById('mySVG');
rect = document.getElementById('myRect');
svg.onmousemove = function (e)
{
if (e.currentTarget.toString().indexOf('SVGSVGElement') >= 0) {
var x = e.offsetX,
y = e.offsetY;
if (x && y) {
console.log(x)
rect.setAttribute('x', x - 50);
rect.setAttribute('y', y - 50);
}
}
};
</script>
</body>
</html>
但事件處理程序綁定到SVG元素 - 所以它會在鼠標圍繞SVG元素移動時觸發 - 所以不應該將offsetX和offsetY作爲鼠標相對於座標的座標 - 就像它們在Chrome中一樣MSIE(11)?即使鼠標超過了矩形,是否可以獲得與整個畫布相關的偏移量?這是通過offsetParents並添加X和Y座標的問題嗎? – Richard
事件處理程序被綁定到'svg',但是在'rect'上發生的事件一直冒泡到'svg'。 'e.target'爲你提供事件發送的原始元素,'e.currentTarget'是處理程序所連接的元素。 – ccprog
改爲使用offsetParent/offsetLeft和offsetTop代替:https://www.rgraph.net/tests/svg-getmousexy.html – Richard