diff --git a/examples/js/controls/TrackballControls.js b/examples/js/controls/TrackballControls.js index 9c38596b89704008eb98fbd82587aa6fa51805e4..7f2e27657e891212b0794534612623615e14804d 100644 --- a/examples/js/controls/TrackballControls.js +++ b/examples/js/controls/TrackballControls.js @@ -6,8 +6,8 @@ THREE.TrackballControls = function ( object, domElement ) { THREE.EventTarget.call( this ); - var _this = this, - STATE = { NONE : -1, ROTATE : 0, ZOOM : 1, PAN : 2 }; + var _this = this; + var STATE = { NONE: -1, ROTATE: 0, ZOOM: 1, PAN: 2 }; this.object = object; this.domElement = ( domElement !== undefined ) ? domElement : document; @@ -41,8 +41,8 @@ THREE.TrackballControls = function ( object, domElement ) { var lastPosition = new THREE.Vector3(); - var _keyPressed = false, - _state = STATE.NONE, + var _state = STATE.NONE, + _prevState = STATE.NONE, _eye = new THREE.Vector3(), @@ -268,8 +268,10 @@ THREE.TrackballControls = function ( object, domElement ) { function keydown( event ) { if ( ! _this.enabled ) return; + + window.removeEventListener( 'keydown', keydown ); - //event.preventDefault(); + _prevState = _state; if ( _state !== STATE.NONE ) { @@ -288,24 +290,16 @@ THREE.TrackballControls = function ( object, domElement ) { _state = STATE.PAN; } - - if ( _state !== STATE.NONE ) { - - _keyPressed = true; - - } - + } function keyup( event ) { if ( ! _this.enabled ) return; - - if ( _state !== STATE.NONE ) { - - _state = STATE.NONE; - - } + + _state = _prevState; + + window.addEventListener( 'keydown', keydown, false ); } @@ -317,24 +311,27 @@ THREE.TrackballControls = function ( object, domElement ) { event.stopPropagation(); if ( _state === STATE.NONE ) { - + _state = event.button; + + } - if ( _state === STATE.ROTATE && !_this.noRotate ) { - - _rotateStart = _rotateEnd = _this.getMouseProjectionOnBall( event.clientX, event.clientY ); + if ( _state === STATE.ROTATE && !_this.noRotate ) { - } else if ( _state === STATE.ZOOM && !_this.noZoom ) { + _rotateStart = _rotateEnd = _this.getMouseProjectionOnBall( event.clientX, event.clientY ); - _zoomStart = _zoomEnd = _this.getMouseOnScreen( event.clientX, event.clientY ); + } else if ( _state === STATE.ZOOM && !_this.noZoom ) { - } else if ( !this.noPan ) { + _zoomStart = _zoomEnd = _this.getMouseOnScreen( event.clientX, event.clientY ); - _panStart = _panEnd = _this.getMouseOnScreen( event.clientX, event.clientY ); + } else if ( _state === STATE.PAN && !_this.noPan ) { - } + _panStart = _panEnd = _this.getMouseOnScreen( event.clientX, event.clientY ); } + + document.addEventListener( 'mousemove', mousemove, false ); + document.addEventListener( 'mouseup', mouseup, false ); } @@ -342,21 +339,7 @@ THREE.TrackballControls = function ( object, domElement ) { if ( ! _this.enabled ) return; - if ( _keyPressed ) { - - _rotateStart = _rotateEnd = _this.getMouseProjectionOnBall( event.clientX, event.clientY ); - _zoomStart = _zoomEnd = _this.getMouseOnScreen( event.clientX, event.clientY ); - _panStart = _panEnd = _this.getMouseOnScreen( event.clientX, event.clientY ); - - _keyPressed = false; - - } - - if ( _state === STATE.NONE ) { - - return; - - } else if ( _state === STATE.ROTATE && !_this.noRotate ) { + if ( _state === STATE.ROTATE && !_this.noRotate ) { _rotateEnd = _this.getMouseProjectionOnBall( event.clientX, event.clientY ); @@ -380,6 +363,9 @@ THREE.TrackballControls = function ( object, domElement ) { event.stopPropagation(); _state = STATE.NONE; + + document.removeEventListener( 'mousemove', mousemove ); + document.removeEventListener( 'mouseup', mouseup ); } @@ -408,9 +394,7 @@ THREE.TrackballControls = function ( object, domElement ) { this.domElement.addEventListener( 'contextmenu', function ( event ) { event.preventDefault(); }, false ); - this.domElement.addEventListener( 'mousemove', mousemove, false ); this.domElement.addEventListener( 'mousedown', mousedown, false ); - this.domElement.addEventListener( 'mouseup', mouseup, false ); this.domElement.addEventListener( 'DOMMouseScroll', mousewheel, false ); this.domElement.addEventListener( 'mousewheel', mousewheel, false );