Calculate mouse position including scroll of overflow elements (cannot rely on pageX/Y).
authorMichael Jumper <zhangmaike@users.sourceforge.net>
Fri, 6 Apr 2012 19:38:24 +0000 (12:38 -0700)
committerMichael Jumper <zhangmaike@users.sourceforge.net>
Fri, 6 Apr 2012 19:38:24 +0000 (12:38 -0700)
src/main/resources/mouse.js

index 006c332..dbd4c2a 100644 (file)
@@ -121,20 +121,17 @@ Guacamole.Mouse = function(element) {
         e.returnValue = false;
     }
 
-    function moveMouse(pageX, pageY) {
+    function moveMouse(clientX, clientY) {
 
-        guac_mouse.currentState.x = pageX - element.offsetLeft;
-        guac_mouse.currentState.y = pageY - element.offsetTop;
+        guac_mouse.currentState.x = clientX - element.offsetLeft;
+        guac_mouse.currentState.y = clientY - element.offsetTop;
 
         // This is all JUST so we can get the mouse position within the element
         var parent = element.offsetParent;
         while (parent) {
 
-            if (parent.offsetLeft)
-                guac_mouse.currentState.x -= parent.offsetLeft;
-
-            if (parent.offsetTop)
-                guac_mouse.currentState.y -= parent.offsetTop;
+            guac_mouse.currentState.x -= parent.offsetLeft - parent.scrollLeft;
+            guac_mouse.currentState.y -= parent.offsetTop  - parent.scrollTop;
 
             parent = parent.offsetParent;
         }
@@ -157,7 +154,7 @@ Guacamole.Mouse = function(element) {
 
         cancelEvent(e);
 
-        moveMouse(e.pageX, e.pageY);
+        moveMouse(e.clientX, e.clientY);
 
     }, false);