浏览代码

EditorControls: Implemented Pointer Events.

Mr.doob 4 年之前
父节点
当前提交
e55b718359
共有 1 个文件被更改,包括 59 次插入20 次删除
  1. 59 20
      editor/js/EditorControls.js

+ 59 - 20
editor/js/EditorControls.js

@@ -112,12 +112,64 @@ function EditorControls( object, domElement ) {
 
 	};
 
-	// mouse
+	//
 
-	function onMouseDown( event ) {
+	function onPointerDown( event ) {
+
+		if ( scope.enabled === false ) return;
+
+		switch ( event.pointerType ) {
+
+			case 'mouse':
+				onMouseDown( event );
+				break;
+
+			// TODO touch
+
+		}
+
+		domElement.ownerDocument.addEventListener( 'pointermove', onPointerMove, false );
+		domElement.ownerDocument.addEventListener( 'pointerup', onPointerUp, false );
+
+	}
+
+	function onPointerMove( event ) {
 
 		if ( scope.enabled === false ) return;
 
+		switch ( event.pointerType ) {
+
+			case 'mouse':
+				onMouseMove( event );
+				break;
+
+			// TODO touch
+
+		}
+
+	}
+
+	function onPointerUp( event ) {
+
+		switch ( event.pointerType ) {
+
+			case 'mouse':
+				onMouseUp( event );
+				break;
+
+			// TODO touch
+
+		}
+
+		domElement.ownerDocument.removeEventListener( 'pointermove', onPointerMove, false );
+		domElement.ownerDocument.removeEventListener( 'pointerup', onPointerUp, false );
+
+	}
+
+	// mouse
+
+	function onMouseDown( event ) {
+
 		if ( event.button === 0 ) {
 
 			state = STATE.ROTATE;
@@ -134,17 +186,10 @@ function EditorControls( object, domElement ) {
 
 		pointerOld.set( event.clientX, event.clientY );
 
-		domElement.addEventListener( 'mousemove', onMouseMove, false );
-		domElement.addEventListener( 'mouseup', onMouseUp, false );
-		domElement.addEventListener( 'mouseout', onMouseUp, false );
-		domElement.addEventListener( 'dblclick', onMouseUp, false );
-
 	}
 
 	function onMouseMove( event ) {
 
-		if ( scope.enabled === false ) return;
-
 		pointer.set( event.clientX, event.clientY );
 
 		var movementX = pointer.x - pointerOld.x;
@@ -170,11 +215,6 @@ function EditorControls( object, domElement ) {
 
 	function onMouseUp( /* event */ ) {
 
-		domElement.removeEventListener( 'mousemove', onMouseMove, false );
-		domElement.removeEventListener( 'mouseup', onMouseUp, false );
-		domElement.removeEventListener( 'mouseout', onMouseUp, false );
-		domElement.removeEventListener( 'dblclick', onMouseUp, false );
-
 		state = STATE.NONE;
 
 	}
@@ -199,13 +239,10 @@ function EditorControls( object, domElement ) {
 	this.dispose = function () {
 
 		domElement.removeEventListener( 'contextmenu', contextmenu, false );
-		domElement.removeEventListener( 'mousedown', onMouseDown, false );
+		domElement.removeEventListener( 'dblclick', onMouseUp, false );
 		domElement.removeEventListener( 'wheel', onMouseWheel, false );
 
-		domElement.removeEventListener( 'mousemove', onMouseMove, false );
-		domElement.removeEventListener( 'mouseup', onMouseUp, false );
-		domElement.removeEventListener( 'mouseout', onMouseUp, false );
-		domElement.removeEventListener( 'dblclick', onMouseUp, false );
+		domElement.removeEventListener( 'pointerdown', onPointerDown, false );
 
 		domElement.removeEventListener( 'touchstart', touchStart, false );
 		domElement.removeEventListener( 'touchmove', touchMove, false );
@@ -213,9 +250,11 @@ function EditorControls( object, domElement ) {
 	};
 
 	domElement.addEventListener( 'contextmenu', contextmenu, false );
-	domElement.addEventListener( 'mousedown', onMouseDown, false );
+	domElement.addEventListener( 'dblclick', onMouseUp, false );
 	domElement.addEventListener( 'wheel', onMouseWheel, false );
 
+	domElement.addEventListener( 'pointerdown', onPointerDown, false );
+
 	// touch
 
 	var touches = [ new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3() ];