提交 5c760e72 编写于 作者: M Mr.doob

OrbitControls: Code clean up and addressed concerns raised in #3989.

上级 f00cddac
...@@ -282,25 +282,25 @@ THREE.OrbitControls = function ( object, domElement ) { ...@@ -282,25 +282,25 @@ THREE.OrbitControls = function ( object, domElement ) {
function onMouseDown( event ) { function onMouseDown( event ) {
if ( scope.enabled === false ) { return; } if ( scope.enabled === false ) return;
event.preventDefault(); event.preventDefault();
if ( event.button === 0 ) { if ( event.button === 0 ) {
if ( scope.noRotate === true ) { return; } if ( scope.noRotate === true ) return;
state = STATE.ROTATE; state = STATE.ROTATE;
rotateStart.set( event.clientX, event.clientY ); rotateStart.set( event.clientX, event.clientY );
} else if ( event.button === 1 ) { } else if ( event.button === 1 ) {
if ( scope.noZoom === true ) { return; } if ( scope.noZoom === true ) return;
state = STATE.DOLLY; state = STATE.DOLLY;
dollyStart.set( event.clientX, event.clientY ); dollyStart.set( event.clientX, event.clientY );
} else if ( event.button === 2 ) { } else if ( event.button === 2 ) {
if ( scope.noPan === true ) { return; } if ( scope.noPan === true ) return;
state = STATE.PAN; state = STATE.PAN;
...@@ -389,13 +389,15 @@ THREE.OrbitControls = function ( object, domElement ) { ...@@ -389,13 +389,15 @@ THREE.OrbitControls = function ( object, domElement ) {
if ( scope.enabled === false || scope.noZoom === true ) return; if ( scope.enabled === false || scope.noZoom === true ) return;
event.preventDefault();
var delta = 0; var delta = 0;
if ( event.wheelDelta ) { // WebKit / Opera / Explorer 9 if ( event.wheelDelta !== undefined ) { // WebKit / Opera / Explorer 9
delta = event.wheelDelta; delta = event.wheelDelta;
} else if ( event.detail ) { // Firefox } else if ( event.detail !== undefined ) { // Firefox
delta = - event.detail; delta = - event.detail;
...@@ -417,38 +419,26 @@ THREE.OrbitControls = function ( object, domElement ) { ...@@ -417,38 +419,26 @@ THREE.OrbitControls = function ( object, domElement ) {
function onKeyDown( event ) { function onKeyDown( event ) {
if ( scope.enabled === false ) { return; } if ( scope.enabled === false || scope.noKeys === true || scope.noPan === true ) return;
if ( scope.noKeys === true ) { return; }
if ( scope.noPan === true ) { return; }
// pan a pixel - I guess for precise positioning?
// Greggman fix: https://github.com/greggman/three.js/commit/fde9f9917d6d8381f06bf22cdff766029d1761be
var needUpdate = false;
switch ( event.keyCode ) { switch ( event.keyCode ) {
case scope.keys.UP: case scope.keys.UP:
scope.pan( new THREE.Vector2( 0, scope.keyPanSpeed ) ); scope.pan( new THREE.Vector2( 0, scope.keyPanSpeed ) );
needUpdate = true; scope.update();
break; break;
case scope.keys.BOTTOM: case scope.keys.BOTTOM:
scope.pan( new THREE.Vector2( 0, -scope.keyPanSpeed ) ); scope.pan( new THREE.Vector2( 0, -scope.keyPanSpeed ) );
needUpdate = true; scope.update();
break; break;
case scope.keys.LEFT: case scope.keys.LEFT:
scope.pan( new THREE.Vector2( scope.keyPanSpeed, 0 ) ); scope.pan( new THREE.Vector2( scope.keyPanSpeed, 0 ) );
needUpdate = true; scope.update();
break; break;
case scope.keys.RIGHT: case scope.keys.RIGHT:
scope.pan( new THREE.Vector2( -scope.keyPanSpeed, 0 ) ); scope.pan( new THREE.Vector2( -scope.keyPanSpeed, 0 ) );
needUpdate = true; scope.update();
break; break;
}
// Greggman fix: https://github.com/greggman/three.js/commit/fde9f9917d6d8381f06bf22cdff766029d1761be
if ( needUpdate ) {
scope.update();
} }
...@@ -456,12 +446,12 @@ THREE.OrbitControls = function ( object, domElement ) { ...@@ -456,12 +446,12 @@ THREE.OrbitControls = function ( object, domElement ) {
function touchstart( event ) { function touchstart( event ) {
if ( scope.enabled === false ) { return; } if ( scope.enabled === false ) return;
switch ( event.touches.length ) { switch ( event.touches.length ) {
case 1: // one-fingered touch: rotate case 1: // one-fingered touch: rotate
if ( scope.noRotate === true ) { return; } if ( scope.noRotate === true ) return;
state = STATE.TOUCH_ROTATE; state = STATE.TOUCH_ROTATE;
...@@ -469,7 +459,7 @@ THREE.OrbitControls = function ( object, domElement ) { ...@@ -469,7 +459,7 @@ THREE.OrbitControls = function ( object, domElement ) {
break; break;
case 2: // two-fingered touch: dolly case 2: // two-fingered touch: dolly
if ( scope.noZoom === true ) { return; } if ( scope.noZoom === true ) return;
state = STATE.TOUCH_DOLLY; state = STATE.TOUCH_DOLLY;
...@@ -480,7 +470,7 @@ THREE.OrbitControls = function ( object, domElement ) { ...@@ -480,7 +470,7 @@ THREE.OrbitControls = function ( object, domElement ) {
break; break;
case 3: // three-fingered touch: pan case 3: // three-fingered touch: pan
if ( scope.noPan === true ) { return; } if ( scope.noPan === true ) return;
state = STATE.TOUCH_PAN; state = STATE.TOUCH_PAN;
...@@ -495,7 +485,7 @@ THREE.OrbitControls = function ( object, domElement ) { ...@@ -495,7 +485,7 @@ THREE.OrbitControls = function ( object, domElement ) {
function touchmove( event ) { function touchmove( event ) {
if ( scope.enabled === false ) { return; } if ( scope.enabled === false ) return;
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
...@@ -507,8 +497,8 @@ THREE.OrbitControls = function ( object, domElement ) { ...@@ -507,8 +497,8 @@ THREE.OrbitControls = function ( object, domElement ) {
switch ( event.touches.length ) { switch ( event.touches.length ) {
case 1: // one-fingered touch: rotate case 1: // one-fingered touch: rotate
if ( scope.noRotate === true ) { return; } if ( scope.noRotate === true ) return;
if ( state !== STATE.TOUCH_ROTATE ) { return; } if ( state !== STATE.TOUCH_ROTATE ) return;
rotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); rotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );
rotateDelta.subVectors( rotateEnd, rotateStart ); rotateDelta.subVectors( rotateEnd, rotateStart );
...@@ -524,8 +514,8 @@ THREE.OrbitControls = function ( object, domElement ) { ...@@ -524,8 +514,8 @@ THREE.OrbitControls = function ( object, domElement ) {
break; break;
case 2: // two-fingered touch: dolly case 2: // two-fingered touch: dolly
if ( scope.noZoom === true ) { return; } if ( scope.noZoom === true ) return;
if ( state !== STATE.TOUCH_DOLLY ) { return; } if ( state !== STATE.TOUCH_DOLLY ) return;
var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX; var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;
var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY; var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;
...@@ -550,8 +540,8 @@ THREE.OrbitControls = function ( object, domElement ) { ...@@ -550,8 +540,8 @@ THREE.OrbitControls = function ( object, domElement ) {
break; break;
case 3: // three-fingered touch: pan case 3: // three-fingered touch: pan
if ( scope.noPan === true ) { return; } if ( scope.noPan === true ) return;
if ( state !== STATE.TOUCH_PAN ) { return; } if ( state !== STATE.TOUCH_PAN ) return;
panEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY ); panEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );
panDelta.subVectors( panEnd, panStart ); panDelta.subVectors( panEnd, panStart );
...@@ -578,7 +568,7 @@ THREE.OrbitControls = function ( object, domElement ) { ...@@ -578,7 +568,7 @@ THREE.OrbitControls = function ( object, domElement ) {
function touchend( /* event */ ) { function touchend( /* event */ ) {
if ( scope.enabled === false ) { return; } if ( scope.enabled === false ) return;
state = STATE.NONE; state = STATE.NONE;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册