ImageLoader.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /**
  2. * @author mrdoob / http://mrdoob.com/
  3. */
  4. import { Cache } from './Cache.js';
  5. import { Loader } from './Loader.js';
  6. function ImageLoader( manager ) {
  7. Loader.call( this, manager );
  8. }
  9. ImageLoader.prototype = Object.assign( Object.create( Loader.prototype ), {
  10. constructor: ImageLoader,
  11. load: function ( url, onLoad, onProgress, onError ) {
  12. if ( this.path !== undefined ) url = this.path + url;
  13. url = this.manager.resolveURL( url );
  14. var scope = this;
  15. var cached = Cache.get( url );
  16. if ( cached !== undefined ) {
  17. scope.manager.itemStart( url );
  18. setTimeout( function () {
  19. if ( onLoad ) onLoad( cached );
  20. scope.manager.itemEnd( url );
  21. }, 0 );
  22. return cached;
  23. }
  24. var image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' );
  25. function onImageLoad() {
  26. image.removeEventListener( 'load', onImageLoad, false );
  27. image.removeEventListener( 'error', onImageError, false );
  28. Cache.add( url, this );
  29. if ( onLoad ) onLoad( this );
  30. scope.manager.itemEnd( url );
  31. }
  32. function onImageError( event ) {
  33. image.removeEventListener( 'load', onImageLoad, false );
  34. image.removeEventListener( 'error', onImageError, false );
  35. if ( onError ) onError( event );
  36. scope.manager.itemError( url );
  37. scope.manager.itemEnd( url );
  38. }
  39. image.addEventListener( 'load', onImageLoad, false );
  40. image.addEventListener( 'error', onImageError, false );
  41. if ( url.substr( 0, 5 ) !== 'data:' ) {
  42. if ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;
  43. }
  44. scope.manager.itemStart( url );
  45. image.src = url;
  46. return image;
  47. }
  48. } );
  49. export { ImageLoader };