Browse Source

Merge pull request #13271 from emeyex/imageloader-removeeventlisteners

ImageLoader: remove image event listeners explicitly
Mr.doob 7 years ago
parent
commit
a80da38ed2
1 changed files with 20 additions and 10 deletions
  1. 20 10
      src/loaders/ImageLoader.js

+ 20 - 10
src/loaders/ImageLoader.js

@@ -46,7 +46,10 @@ Object.assign( ImageLoader.prototype, {
 
 		var image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' );
 
-		image.addEventListener( 'load', function () {
+		function onInternalLoad() {
+
+			image.removeEventListener( 'load', onInternalLoad, false );
+			image.removeEventListener( 'error', onInternalError, false );
 
 			Cache.add( url, this );
 
@@ -54,24 +57,31 @@ Object.assign( ImageLoader.prototype, {
 
 			scope.manager.itemEnd( url );
 
-		}, false );
-
-		/*
-		image.addEventListener( 'progress', function ( event ) {
-
-			if ( onProgress ) onProgress( event );
+		}
 
-		}, false );
-		*/
+		function onInternalError( event ) {
 
-		image.addEventListener( 'error', function ( event ) {
+			image.removeEventListener( 'load', onInternalLoad, false );
+			image.removeEventListener( 'error', onInternalError, false );
 
 			if ( onError ) onError( event );
 
 			scope.manager.itemEnd( url );
 			scope.manager.itemError( url );
 
+		}
+
+		image.addEventListener( 'load', onInternalLoad, false );
+
+		/*
+		image.addEventListener( 'progress', function ( event ) {
+
+			if ( onProgress ) onProgress( event );
+
 		}, false );
+		*/
+
+		image.addEventListener( 'error', onInternalError, false );
 
 		if ( url.substr( 0, 5 ) !== 'data:' ) {