8
8
THREE . TrackballControls = function ( object , domElement ) {
9
9
10
10
var _this = this ;
11
- var STATE = { NONE : - 1 , ROTATE : 0 , ZOOM : 1 , PAN : 2 , TOUCH_ROTATE : 3 , TOUCH_ZOOM_PAN : 4 } ;
11
+ var STATE = { NONE : - 1 , ROTATE : 0 , ZOOM : 1 , PAN : 2 , TOUCH_ROTATE : 3 , TOUCH_ZOOM_PAN : 4 } ;
12
12
13
13
this . object = object ;
14
14
this . domElement = ( domElement !== undefined ) ? domElement : document ;
@@ -115,7 +115,7 @@ THREE.TrackballControls = function ( object, domElement ) {
115
115
116
116
var vector = new THREE . Vector2 ( ) ;
117
117
118
- return function ( pageX , pageY ) {
118
+ return function getMouseOnScreen ( pageX , pageY ) {
119
119
120
120
vector . set (
121
121
( pageX - _this . screen . left ) / _this . screen . width ,
@@ -132,19 +132,20 @@ THREE.TrackballControls = function ( object, domElement ) {
132
132
133
133
var vector = new THREE . Vector2 ( ) ;
134
134
135
- return function ( pageX , pageY ) {
135
+ return function getMouseOnCircle ( pageX , pageY ) {
136
136
137
137
vector . set (
138
138
( ( pageX - _this . screen . width * 0.5 - _this . screen . left ) / ( _this . screen . width * 0.5 ) ) ,
139
139
( ( _this . screen . height + 2 * ( _this . screen . top - pageY ) ) / _this . screen . width ) // screen.width intentional
140
140
) ;
141
141
142
142
return vector ;
143
+
143
144
} ;
144
145
145
146
} ( ) ) ;
146
147
147
- this . rotateCamera = ( function ( ) {
148
+ this . rotateCamera = ( function ( ) {
148
149
149
150
var axis = new THREE . Vector3 ( ) ,
150
151
quaternion = new THREE . Quaternion ( ) ,
@@ -154,7 +155,7 @@ THREE.TrackballControls = function ( object, domElement ) {
154
155
moveDirection = new THREE . Vector3 ( ) ,
155
156
angle ;
156
157
157
- return function ( ) {
158
+ return function rotateCamera ( ) {
158
159
159
160
moveDirection . set ( _moveCurr . x - _movePrev . x , _moveCurr . y - _movePrev . y , 0 ) ;
160
161
angle = moveDirection . length ( ) ;
@@ -183,9 +184,7 @@ THREE.TrackballControls = function ( object, domElement ) {
183
184
_lastAxis . copy ( axis ) ;
184
185
_lastAngle = angle ;
185
186
186
- }
187
-
188
- else if ( ! _this . staticMoving && _lastAngle ) {
187
+ } else if ( ! _this . staticMoving && _lastAngle ) {
189
188
190
189
_lastAngle *= Math . sqrt ( 1.0 - _this . dynamicDampingFactor ) ;
191
190
_eye . copy ( _this . object . position ) . sub ( _this . target ) ;
@@ -199,7 +198,7 @@ THREE.TrackballControls = function ( object, domElement ) {
199
198
200
199
} ;
201
200
202
- } ( ) ) ;
201
+ } ( ) ) ;
203
202
204
203
205
204
this . zoomCamera = function ( ) {
@@ -236,13 +235,13 @@ THREE.TrackballControls = function ( object, domElement ) {
236
235
237
236
} ;
238
237
239
- this . panCamera = ( function ( ) {
238
+ this . panCamera = ( function ( ) {
240
239
241
240
var mouseChange = new THREE . Vector2 ( ) ,
242
241
objectUp = new THREE . Vector3 ( ) ,
243
242
pan = new THREE . Vector3 ( ) ;
244
243
245
- return function ( ) {
244
+ return function panCamera ( ) {
246
245
247
246
mouseChange . copy ( _panEnd ) . sub ( _panStart ) ;
248
247
@@ -267,23 +266,26 @@ THREE.TrackballControls = function ( object, domElement ) {
267
266
}
268
267
269
268
}
269
+
270
270
} ;
271
271
272
- } ( ) ) ;
272
+ } ( ) ) ;
273
273
274
274
this . checkDistances = function ( ) {
275
275
276
- if ( ! _this . noZoom || ! _this . noPan ) {
276
+ if ( ! _this . noZoom || ! _this . noPan ) {
277
277
278
278
if ( _eye . lengthSq ( ) > _this . maxDistance * _this . maxDistance ) {
279
279
280
280
_this . object . position . addVectors ( _this . target , _eye . setLength ( _this . maxDistance ) ) ;
281
+ _zoomStart . copy ( _zoomEnd ) ;
281
282
282
283
}
283
284
284
285
if ( _eye . lengthSq ( ) < _this . minDistance * _this . minDistance ) {
285
286
286
287
_this . object . position . addVectors ( _this . target , _eye . setLength ( _this . minDistance ) ) ;
288
+ _zoomStart . copy ( _zoomEnd ) ;
287
289
288
290
}
289
291
@@ -295,19 +297,19 @@ THREE.TrackballControls = function ( object, domElement ) {
295
297
296
298
_eye . subVectors ( _this . object . position , _this . target ) ;
297
299
298
- if ( ! _this . noRotate ) {
300
+ if ( ! _this . noRotate ) {
299
301
300
302
_this . rotateCamera ( ) ;
301
303
302
304
}
303
305
304
- if ( ! _this . noZoom ) {
306
+ if ( ! _this . noZoom ) {
305
307
306
308
_this . zoomCamera ( ) ;
307
309
308
310
}
309
311
310
- if ( ! _this . noPan ) {
312
+ if ( ! _this . noPan ) {
311
313
312
314
_this . panCamera ( ) ;
313
315
@@ -362,15 +364,15 @@ THREE.TrackballControls = function ( object, domElement ) {
362
364
363
365
return ;
364
366
365
- } else if ( event . keyCode === _this . keys [ STATE . ROTATE ] && ! _this . noRotate ) {
367
+ } else if ( event . keyCode === _this . keys [ STATE . ROTATE ] && ! _this . noRotate ) {
366
368
367
369
_state = STATE . ROTATE ;
368
370
369
- } else if ( event . keyCode === _this . keys [ STATE . ZOOM ] && ! _this . noZoom ) {
371
+ } else if ( event . keyCode === _this . keys [ STATE . ZOOM ] && ! _this . noZoom ) {
370
372
371
373
_state = STATE . ZOOM ;
372
374
373
- } else if ( event . keyCode === _this . keys [ STATE . PAN ] && ! _this . noPan ) {
375
+ } else if ( event . keyCode === _this . keys [ STATE . PAN ] && ! _this . noPan ) {
374
376
375
377
_state = STATE . PAN ;
376
378
@@ -401,20 +403,20 @@ THREE.TrackballControls = function ( object, domElement ) {
401
403
402
404
}
403
405
404
- if ( _state === STATE . ROTATE && ! _this . noRotate ) {
406
+ if ( _state === STATE . ROTATE && ! _this . noRotate ) {
405
407
406
408
_moveCurr . copy ( getMouseOnCircle ( event . pageX , event . pageY ) ) ;
407
- _movePrev . copy ( _moveCurr ) ;
409
+ _movePrev . copy ( _moveCurr ) ;
408
410
409
- } else if ( _state === STATE . ZOOM && ! _this . noZoom ) {
411
+ } else if ( _state === STATE . ZOOM && ! _this . noZoom ) {
410
412
411
413
_zoomStart . copy ( getMouseOnScreen ( event . pageX , event . pageY ) ) ;
412
- _zoomEnd . copy ( _zoomStart ) ;
414
+ _zoomEnd . copy ( _zoomStart ) ;
413
415
414
- } else if ( _state === STATE . PAN && ! _this . noPan ) {
416
+ } else if ( _state === STATE . PAN && ! _this . noPan ) {
415
417
416
418
_panStart . copy ( getMouseOnScreen ( event . pageX , event . pageY ) ) ;
417
- _panEnd . copy ( _panStart ) ;
419
+ _panEnd . copy ( _panStart ) ;
418
420
419
421
}
420
422
@@ -432,16 +434,16 @@ THREE.TrackballControls = function ( object, domElement ) {
432
434
event . preventDefault ( ) ;
433
435
event . stopPropagation ( ) ;
434
436
435
- if ( _state === STATE . ROTATE && ! _this . noRotate ) {
437
+ if ( _state === STATE . ROTATE && ! _this . noRotate ) {
436
438
437
- _movePrev . copy ( _moveCurr ) ;
439
+ _movePrev . copy ( _moveCurr ) ;
438
440
_moveCurr . copy ( getMouseOnCircle ( event . pageX , event . pageY ) ) ;
439
441
440
- } else if ( _state === STATE . ZOOM && ! _this . noZoom ) {
442
+ } else if ( _state === STATE . ZOOM && ! _this . noZoom ) {
441
443
442
444
_zoomEnd . copy ( getMouseOnScreen ( event . pageX , event . pageY ) ) ;
443
445
444
- } else if ( _state === STATE . PAN && ! _this . noPan ) {
446
+ } else if ( _state === STATE . PAN && ! _this . noPan ) {
445
447
446
448
_panEnd . copy ( getMouseOnScreen ( event . pageX , event . pageY ) ) ;
447
449
@@ -473,11 +475,15 @@ THREE.TrackballControls = function ( object, domElement ) {
473
475
474
476
var delta = 0 ;
475
477
476
- if ( event . wheelDelta ) { // WebKit / Opera / Explorer 9
478
+ if ( event . wheelDelta ) {
479
+
480
+ // WebKit / Opera / Explorer 9
477
481
478
482
delta = event . wheelDelta / 40 ;
479
483
480
- } else if ( event . detail ) { // Firefox
484
+ } else if ( event . detail ) {
485
+
486
+ // Firefox
481
487
482
488
delta = - event . detail / 3 ;
483
489
@@ -498,7 +504,7 @@ THREE.TrackballControls = function ( object, domElement ) {
498
504
case 1 :
499
505
_state = STATE . TOUCH_ROTATE ;
500
506
_moveCurr . copy ( getMouseOnCircle ( event . touches [ 0 ] . pageX , event . touches [ 0 ] . pageY ) ) ;
501
- _movePrev . copy ( _moveCurr ) ;
507
+ _movePrev . copy ( _moveCurr ) ;
502
508
break ;
503
509
504
510
case 2 :
@@ -532,7 +538,7 @@ THREE.TrackballControls = function ( object, domElement ) {
532
538
switch ( event . touches . length ) {
533
539
534
540
case 1 :
535
- _movePrev . copy ( _moveCurr ) ;
541
+ _movePrev . copy ( _moveCurr ) ;
536
542
_moveCurr . copy ( getMouseOnCircle ( event . touches [ 0 ] . pageX , event . touches [ 0 ] . pageY ) ) ;
537
543
break ;
538
544
@@ -560,7 +566,7 @@ THREE.TrackballControls = function ( object, domElement ) {
560
566
switch ( event . touches . length ) {
561
567
562
568
case 1 :
563
- _movePrev . copy ( _moveCurr ) ;
569
+ _movePrev . copy ( _moveCurr ) ;
564
570
_moveCurr . copy ( getMouseOnCircle ( event . touches [ 0 ] . pageX , event . touches [ 0 ] . pageY ) ) ;
565
571
break ;
566
572
@@ -580,12 +586,35 @@ THREE.TrackballControls = function ( object, domElement ) {
580
586
581
587
}
582
588
583
- this . domElement . addEventListener ( 'contextmenu' , function ( event ) { event . preventDefault ( ) ; } , false ) ;
589
+ function contextmenu ( event ) {
584
590
585
- this . domElement . addEventListener ( 'mousedown' , mousedown , false ) ;
591
+ event . preventDefault ( ) ;
592
+
593
+ }
594
+
595
+ this . dispose = function ( ) {
596
+
597
+ this . domElement . removeEventListener ( 'contextmenu' , contextmenu , false ) ;
598
+ this . domElement . removeEventListener ( 'mousedown' , mousedown , false ) ;
599
+ this . domElement . removeEventListener ( 'mousewheel' , mousewheel , false ) ;
600
+ this . domElement . removeEventListener ( 'MozMousePixelScroll' , mousewheel , false ) ; // firefox
601
+
602
+ this . domElement . removeEventListener ( 'touchstart' , touchstart , false ) ;
603
+ this . domElement . removeEventListener ( 'touchend' , touchend , false ) ;
604
+ this . domElement . removeEventListener ( 'touchmove' , touchmove , false ) ;
586
605
606
+ document . removeEventListener ( 'mousemove' , mousemove , false ) ;
607
+ document . removeEventListener ( 'mouseup' , mouseup , false ) ;
608
+
609
+ window . removeEventListener ( 'keydown' , keydown , false ) ;
610
+ window . removeEventListener ( 'keyup' , keyup , false ) ;
611
+
612
+ }
613
+
614
+ this . domElement . addEventListener ( 'contextmenu' , contextmenu , false ) ;
615
+ this . domElement . addEventListener ( 'mousedown' , mousedown , false ) ;
587
616
this . domElement . addEventListener ( 'mousewheel' , mousewheel , false ) ;
588
- this . domElement . addEventListener ( 'DOMMouseScroll ' , mousewheel , false ) ; // firefox
617
+ this . domElement . addEventListener ( 'MozMousePixelScroll ' , mousewheel , false ) ; // firefox
589
618
590
619
this . domElement . addEventListener ( 'touchstart' , touchstart , false ) ;
591
620
this . domElement . addEventListener ( 'touchend' , touchend , false ) ;
0 commit comments