ImageLoader.js 1.6 KB

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