ImageLoader.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /**
  2. * @author mrdoob / http://mrdoob.com/
  3. */
  4. THREE.ImageLoader = function ( manager ) {
  5. this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;
  6. };
  7. THREE.ImageLoader.prototype = {
  8. constructor: THREE.ImageLoader,
  9. load: function ( url, onLoad, onProgress, onError ) {
  10. if ( this.path !== undefined ) url = this.path + url;
  11. var scope = this;
  12. var cached = THREE.Cache.get( url );
  13. if ( cached !== undefined ) {
  14. scope.manager.itemStart( url );
  15. if ( onLoad ) {
  16. setTimeout( function () {
  17. onLoad( cached );
  18. scope.manager.itemEnd( url );
  19. }, 0 );
  20. } else {
  21. scope.manager.itemEnd( url );
  22. }
  23. return cached;
  24. }
  25. var image = document.createElement( 'img' );
  26. image.addEventListener( 'load', function ( event ) {
  27. THREE.Cache.add( url, this );
  28. if ( onLoad ) onLoad( this );
  29. scope.manager.itemEnd( url );
  30. }, false );
  31. if ( onProgress !== undefined ) {
  32. image.addEventListener( 'progress', function ( event ) {
  33. onProgress( event );
  34. }, false );
  35. }
  36. image.addEventListener( 'error', function ( event ) {
  37. if ( onError ) onError( event );
  38. scope.manager.itemError( url );
  39. }, false );
  40. if ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;
  41. scope.manager.itemStart( url );
  42. image.src = url;
  43. return image;
  44. },
  45. setCrossOrigin: function ( value ) {
  46. this.crossOrigin = value;
  47. },
  48. setPath: function ( value ) {
  49. this.path = value;
  50. }
  51. };