ImageLoader.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import { FileLoader } from './FileLoader';
  2. import { DefaultLoadingManager } from './LoadingManager';
  3. /**
  4. * @author mrdoob / http://mrdoob.com/
  5. */
  6. function ImageLoader( manager ) {
  7. this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;
  8. }
  9. Object.assign( ImageLoader.prototype, {
  10. load: function ( url, onLoad, onProgress, onError ) {
  11. var scope = this;
  12. var image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' );
  13. image.onload = function () {
  14. image.onload = null;
  15. URL.revokeObjectURL( image.src );
  16. if ( onLoad ) onLoad( image );
  17. scope.manager.itemEnd( url );
  18. };
  19. image.onerror = onError;
  20. if ( url.indexOf( 'data:' ) === 0 ) {
  21. image.src = url;
  22. } else {
  23. var loader = new FileLoader();
  24. loader.setPath( this.path );
  25. loader.setResponseType( 'blob' );
  26. loader.setWithCredentials( this.withCredentials );
  27. loader.load( url, function ( blob ) {
  28. image.src = URL.createObjectURL( blob );
  29. }, onProgress, onError );
  30. }
  31. scope.manager.itemStart( url );
  32. return image;
  33. },
  34. setCrossOrigin: function ( value ) {
  35. this.crossOrigin = value;
  36. return this;
  37. },
  38. setWithCredentials: function ( value ) {
  39. this.withCredentials = value;
  40. return this;
  41. },
  42. setPath: function ( value ) {
  43. this.path = value;
  44. return this;
  45. }
  46. } );
  47. export { ImageLoader };