マウスの位置を取得しようとすると、Firefox v25 ではほとんど問題がありません。ネストされた 2 つの svg を使用すると、FF は正しい位置を返しませんが、Chrome と IE10 では正常に動作します。
これは例です: http://jsfiddle.net/LwZFb/
<div class="position">
<div>client position <span id="clientPosition"></span></div>
<div>svg position <span id="svgPosition"></span></div>
</div>
<svg id="test1" version="1.1" viewBox="0 0 500 500" width="500px" height="500px">
<svg id="testSVG" preserveAspectRatio="none" version="1.1" viewBox="0 0 1000 1000" width="500px" height="500px">
<rect fill="papayaWhip" x="250" y="250" width="500" height="500"/>
<text x="225" y="240">250/250</text>
<text x="725" y="240">750/250</text>
<text x="225" y="775">250/750</text>
<text x="725" y="775">750/750</text>
<rect id="followMe" fill="peachPuff" stroke="crimson" width="20" height="20"/>
</svg>
</svg>
および位置を取得するための js コード:
var svgElement = document.getElementById('testSVG'),
followRectElement = document.getElementById('followMe'),
clientPositionElement = document.getElementById('clientPosition'),
svgPositionElement = document.getElementById('svgPosition');
window.addEventListener('mousemove', function(mouseEvent) {
var svgPoint = svgElement.createSVGPoint();
svgPoint.x = mouseEvent.clientX;
svgPoint.y = mouseEvent.clientY;
svgPoint = svgPoint.matrixTransform(svgElement.getScreenCTM().inverse());
clientPositionElement.innerHTML = [ mouseEvent.clientX, mouseEvent.clientY ].join('/');
svgPositionElement.innerHTML = [ svgPoint.x, svgPoint.y ].join('/');
followRectElement.setAttribute('x', svgPoint.x - 10);
followRectElement.setAttribute('y', svgPoint.y - 10);
});