@@ -19,6 +19,11 @@ import * as constants from '../core/constants';
19
19
*
20
20
* Note: `movedX` continues updating even when
21
21
* <a href="#/p5/requestPointerLock">requestPointerLock()</a> is active.
22
+ * But keep in mind that during an active pointer lock, mouseX and pmouseX
23
+ * are not locked, so `movedX` is based on
24
+ * <a href="https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/movementX">the MouseEvent's movementX</a>
25
+ * value. This value may behave different in different browsers when the user
26
+ * is zoomed in or out.
22
27
*
23
28
* @property {Number } movedX
24
29
* @readOnly
@@ -810,13 +815,31 @@ p5.prototype._updateNextMouseCoords = function(e) {
810
815
e
811
816
) ;
812
817
813
- this . _setProperty ( 'movedX' , e . movementX ) ;
814
- this . _setProperty ( 'movedY' , e . movementY ) ;
818
+
815
819
this . _setProperty ( 'mouseX' , mousePos . x ) ;
816
820
this . _setProperty ( 'mouseY' , mousePos . y ) ;
817
821
this . _setProperty ( 'winMouseX' , mousePos . winX ) ;
818
822
this . _setProperty ( 'winMouseY' , mousePos . winY ) ;
819
823
824
+ if ( document . pointerLockElement === null ) {
825
+ // https://developer.mozilla.org/en-US/docs/Web/API/Document/pointerLockElement
826
+ // "The pointerLockElement ... is null if lock is pending, pointer is unlocked,
827
+ // or the target is in another document."
828
+ // In this case, we use mouseX/Y and pmousX/Y to calculate the distance,
829
+ // which allows movedX/Y to look consistent at different zoom levels acorss
830
+ // browsers.
831
+ const deltaX = this . mouseX - this . pmouseX ;
832
+ const deltaY = this . mouseY - this . pmouseY ;
833
+ this . _setProperty ( 'movedX' , deltaX ) ;
834
+ this . _setProperty ( 'movedY' , deltaY ) ;
835
+ }
836
+ else {
837
+ // Because mouseX/Y and pmouseX/Y are locked, the elements movementX/Y
838
+ // is used for movedX/Y - this maz behave differently on different
839
+ // browsers at different zoom levels.
840
+ this . _setProperty ( 'movedX' , e . movementX ) ;
841
+ this . _setProperty ( 'movedY' , e . movementY ) ;
842
+ }
820
843
}
821
844
822
845
if ( ! this . _hasMouseInteracted ) {
0 commit comments