Browse Source

Object3D now dispatching added/removed events when object is removed from it's parent. CSS3D can nore auto-remove DOM elements. See #3575.

Mr.doob 12 years ago
parent
commit
03759e1e40
3 changed files with 15 additions and 15 deletions
  1. 0 14
      examples/css3d_molecules.html
  2. 11 1
      examples/js/renderers/CSS3DRenderer.js
  3. 4 0
      src/core/Object3D.js

+ 0 - 14
examples/css3d_molecules.html

@@ -19,7 +19,6 @@
 				background: -o-radial-gradient(center, ellipse cover,  rgba(43,45,48,1) 0%,rgba(0,0,0,1) 100%); /* Opera 12+ */
 				background: -ms-radial-gradient(center, ellipse cover,  rgba(43,45,48,1) 0%,rgba(0,0,0,1) 100%); /* IE10+ */
 				background: radial-gradient(ellipse at center,  rgba(43,45,48,1) 0%,rgba(0,0,0,1) 100%); /* W3C */
-				filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#2b2d30', endColorstr='#000000',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */
 
 				margin: 0;
 				font-family: Arial;
@@ -339,21 +338,8 @@
 				for ( var i = 0; i < objects.length; i ++ ) {
 
 					var object = objects[ i ];
-
 					object.parent.remove( object );
 
-					if ( object.element.parentNode === renderer.cameraElement ) {
-
-						renderer.cameraElement.removeChild( object.element );
-
-					}
-
-					if ( object.userData.joint ) {
-
-						object.userData.joint.parent.remove( object.userData.joint );
-
-					}
-
 				}
 
 				objects = [];

+ 11 - 1
examples/js/renderers/CSS3DRenderer.js

@@ -8,12 +8,22 @@ THREE.CSS3DObject = function ( element ) {
 	THREE.Object3D.call( this );
 
 	this.element = element;
-	this.element.style.position = "absolute";
+	this.element.style.position = 'absolute';
 	this.element.style.WebkitTransformStyle = 'preserve-3d';
 	this.element.style.MozTransformStyle = 'preserve-3d';
 	this.element.style.oTransformStyle = 'preserve-3d';
 	this.element.style.transformStyle = 'preserve-3d';
 
+	this.addEventListener( 'removed', function () {
+
+		if ( this.element.parentNode !== null ) {
+
+			this.element.parentNode.removeChild( this.element );
+
+		}
+
+	} );
+
 };
 
 THREE.CSS3DObject.prototype = Object.create( THREE.Object3D.prototype );

+ 4 - 0
src/core/Object3D.js

@@ -307,6 +307,8 @@ THREE.Object3D.prototype = {
 			}
 
 			object.parent = this;
+			object.dispatchEvent( { type: 'added' } );
+
 			this.children.push( object );
 
 			// add to scene
@@ -336,6 +338,8 @@ THREE.Object3D.prototype = {
 		if ( index !== - 1 ) {
 
 			object.parent = undefined;
+			object.dispatchEvent( { type: 'removed' } );
+
 			this.children.splice( index, 1 );
 
 			// remove from scene