I am experiencing troubles concerning the position of mouse cursor inside my SVG document. I’d like to design a potentiometer that will follow the cursor when dragged, using JavaScript in an HTML page.
I tried evt.clientX/Y and evt.screenX/Y but as my SVG is in autoscale, coordinates inside my SVG are different. I have been searching for an answer for days now but I couldn’t find any solution (either knowing my SVG rescaling factor in real time or have a function for mouse location in SVG coordinates system).
The rotation will follow a simple rule:
if (evt.screenX < xc)
ang = Math.atan((evt.screenY - yc) / (evt.screenX - xc)) * 360/(2*Math.PI) - 90;
if (evt.screenX > xc)
ang = Math.atan((evt.screenY - yc) / (evt.screenX - xc)) * 360/(2*Math.PI) + 90;
With (xc;yc) as center of rotation and replacing all evt.screenX/Y by the coordinates of the mouse inside my SVG.
See this code, which not only shows how to transform from screen space to global SVG space, but also how to transform a point from SVG space into the transformed space of an element:
http://phrogz.net/svg/drag_under_transformation.xhtml
In short:
Edit: I’ve created a sample tailored to your needs (albeit only in global SVG space):
http://phrogz.net/svg/rotate-to-point-at-cursor.svg
It adds the following method to the above: