| |
| |
| |
|
|
| import { Cache } from './Cache.js'; |
| import { DefaultLoadingManager } from './LoadingManager.js'; |
|
|
|
|
| function ImageLoader( manager ) { |
|
|
| this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; |
|
|
| } |
|
|
| Object.assign( ImageLoader.prototype, { |
|
|
| crossOrigin: 'anonymous', |
|
|
| load: function ( url, onLoad, onProgress, onError ) { |
|
|
| if ( url === undefined ) url = ''; |
|
|
| if ( this.path !== undefined ) url = this.path + url; |
|
|
| url = this.manager.resolveURL( url ); |
|
|
| var scope = this; |
|
|
| var cached = Cache.get( url ); |
|
|
| if ( cached !== undefined ) { |
|
|
| scope.manager.itemStart( url ); |
|
|
| setTimeout( function () { |
|
|
| if ( onLoad ) onLoad( cached ); |
|
|
| scope.manager.itemEnd( url ); |
|
|
| }, 0 ); |
|
|
| return cached; |
|
|
| } |
|
|
| var image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' ); |
|
|
| function onImageLoad() { |
|
|
| image.removeEventListener( 'load', onImageLoad, false ); |
| image.removeEventListener( 'error', onImageError, false ); |
|
|
| Cache.add( url, this ); |
|
|
| if ( onLoad ) onLoad( this ); |
|
|
| scope.manager.itemEnd( url ); |
|
|
| } |
|
|
| function onImageError( event ) { |
|
|
| image.removeEventListener( 'load', onImageLoad, false ); |
| image.removeEventListener( 'error', onImageError, false ); |
|
|
| if ( onError ) onError( event ); |
|
|
| scope.manager.itemError( url ); |
| scope.manager.itemEnd( url ); |
|
|
| } |
|
|
| image.addEventListener( 'load', onImageLoad, false ); |
| image.addEventListener( 'error', onImageError, false ); |
|
|
| if ( url.substr( 0, 5 ) !== 'data:' ) { |
|
|
| if ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin; |
|
|
| } |
|
|
| scope.manager.itemStart( url ); |
|
|
| image.src = url; |
|
|
| return image; |
|
|
| }, |
|
|
| setCrossOrigin: function ( value ) { |
|
|
| this.crossOrigin = value; |
| return this; |
|
|
| }, |
|
|
| setPath: function ( value ) { |
|
|
| this.path = value; |
| return this; |
|
|
| } |
|
|
| } ); |
|
|
|
|
| export { ImageLoader }; |
|
|