@@ -6,8 +6,8 @@ THREE.TrackballControls = function ( object, domElement ) {
6
6
7
7
THREE . EventTarget . call ( this ) ;
8
8
9
- var _this = this ,
10
- STATE = { NONE : - 1 , ROTATE : 0 , ZOOM : 1 , PAN : 2 } ;
9
+ var _this = this ;
10
+ var STATE = { NONE : - 1 , ROTATE : 0 , ZOOM : 1 , PAN : 2 } ;
11
11
12
12
this . object = object ;
13
13
this . domElement = ( domElement !== undefined ) ? domElement : document ;
@@ -41,8 +41,8 @@ THREE.TrackballControls = function ( object, domElement ) {
41
41
42
42
var lastPosition = new THREE . Vector3 ( ) ;
43
43
44
- var _keyPressed = false ,
45
- _state = STATE . NONE ,
44
+ var _state = STATE . NONE ,
45
+ _prevState = STATE . NONE ,
46
46
47
47
_eye = new THREE . Vector3 ( ) ,
48
48
@@ -268,8 +268,10 @@ THREE.TrackballControls = function ( object, domElement ) {
268
268
function keydown ( event ) {
269
269
270
270
if ( ! _this . enabled ) return ;
271
+
272
+ window . removeEventListener ( 'keydown' , keydown ) ;
271
273
272
- //event.preventDefault() ;
274
+ _prevState = _state ;
273
275
274
276
if ( _state !== STATE . NONE ) {
275
277
@@ -288,24 +290,16 @@ THREE.TrackballControls = function ( object, domElement ) {
288
290
_state = STATE . PAN ;
289
291
290
292
}
291
-
292
- if ( _state !== STATE . NONE ) {
293
-
294
- _keyPressed = true ;
295
-
296
- }
297
-
293
+
298
294
}
299
295
300
296
function keyup ( event ) {
301
297
302
298
if ( ! _this . enabled ) return ;
303
-
304
- if ( _state !== STATE . NONE ) {
305
-
306
- _state = STATE . NONE ;
307
-
308
- }
299
+
300
+ _state = _prevState ;
301
+
302
+ window . addEventListener ( 'keydown' , keydown , false ) ;
309
303
310
304
}
311
305
@@ -317,46 +311,35 @@ THREE.TrackballControls = function ( object, domElement ) {
317
311
event . stopPropagation ( ) ;
318
312
319
313
if ( _state === STATE . NONE ) {
320
-
314
+
321
315
_state = event . button ;
316
+
317
+ }
322
318
323
- if ( _state === STATE . ROTATE && ! _this . noRotate ) {
324
-
325
- _rotateStart = _rotateEnd = _this . getMouseProjectionOnBall ( event . clientX , event . clientY ) ;
319
+ if ( _state === STATE . ROTATE && ! _this . noRotate ) {
326
320
327
- } else if ( _state === STATE . ZOOM && ! _this . noZoom ) {
321
+ _rotateStart = _rotateEnd = _this . getMouseProjectionOnBall ( event . clientX , event . clientY ) ;
328
322
329
- _zoomStart = _zoomEnd = _this . getMouseOnScreen ( event . clientX , event . clientY ) ;
323
+ } else if ( _state === STATE . ZOOM && ! _this . noZoom ) {
330
324
331
- } else if ( ! this . noPan ) {
325
+ _zoomStart = _zoomEnd = _this . getMouseOnScreen ( event . clientX , event . clientY ) ;
332
326
333
- _panStart = _panEnd = _this . getMouseOnScreen ( event . clientX , event . clientY ) ;
327
+ } else if ( _state === STATE . PAN && ! _this . noPan ) {
334
328
335
- }
329
+ _panStart = _panEnd = _this . getMouseOnScreen ( event . clientX , event . clientY ) ;
336
330
337
331
}
332
+
333
+ document . addEventListener ( 'mousemove' , mousemove , false ) ;
334
+ document . addEventListener ( 'mouseup' , mouseup , false ) ;
338
335
339
336
}
340
337
341
338
function mousemove ( event ) {
342
339
343
340
if ( ! _this . enabled ) return ;
344
341
345
- if ( _keyPressed ) {
346
-
347
- _rotateStart = _rotateEnd = _this . getMouseProjectionOnBall ( event . clientX , event . clientY ) ;
348
- _zoomStart = _zoomEnd = _this . getMouseOnScreen ( event . clientX , event . clientY ) ;
349
- _panStart = _panEnd = _this . getMouseOnScreen ( event . clientX , event . clientY ) ;
350
-
351
- _keyPressed = false ;
352
-
353
- }
354
-
355
- if ( _state === STATE . NONE ) {
356
-
357
- return ;
358
-
359
- } else if ( _state === STATE . ROTATE && ! _this . noRotate ) {
342
+ if ( _state === STATE . ROTATE && ! _this . noRotate ) {
360
343
361
344
_rotateEnd = _this . getMouseProjectionOnBall ( event . clientX , event . clientY ) ;
362
345
@@ -380,6 +363,9 @@ THREE.TrackballControls = function ( object, domElement ) {
380
363
event . stopPropagation ( ) ;
381
364
382
365
_state = STATE . NONE ;
366
+
367
+ document . removeEventListener ( 'mousemove' , mousemove ) ;
368
+ document . removeEventListener ( 'mouseup' , mouseup ) ;
383
369
384
370
}
385
371
@@ -408,9 +394,7 @@ THREE.TrackballControls = function ( object, domElement ) {
408
394
409
395
this . domElement . addEventListener ( 'contextmenu' , function ( event ) { event . preventDefault ( ) ; } , false ) ;
410
396
411
- this . domElement . addEventListener ( 'mousemove' , mousemove , false ) ;
412
397
this . domElement . addEventListener ( 'mousedown' , mousedown , false ) ;
413
- this . domElement . addEventListener ( 'mouseup' , mouseup , false ) ;
414
398
this . domElement . addEventListener ( 'DOMMouseScroll' , mousewheel , false ) ;
415
399
this . domElement . addEventListener ( 'mousewheel' , mousewheel , false ) ;
416
400
0 commit comments