UNPKG

1.73 kBJavaScriptView Raw
1/**
2 * @author mrdoob / http://mrdoob.com/
3 */
4
5import { Cache } from './Cache.js';
6import { DefaultLoadingManager } from './LoadingManager.js';
7
8
9function ImageLoader( manager ) {
10
11 this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;
12
13}
14
15Object.assign( ImageLoader.prototype, {
16
17 crossOrigin: 'Anonymous',
18
19 load: function ( url, onLoad, onProgress, onError ) {
20
21 if ( url === undefined ) url = '';
22
23 if ( this.path !== undefined ) url = this.path + url;
24
25 url = this.manager.resolveURL( url );
26
27 var scope = this;
28
29 var cached = Cache.get( url );
30
31 if ( cached !== undefined ) {
32
33 scope.manager.itemStart( url );
34
35 setTimeout( function () {
36
37 if ( onLoad ) onLoad( cached );
38
39 scope.manager.itemEnd( url );
40
41 }, 0 );
42
43 return cached;
44
45 }
46
47 var image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' );
48
49 image.addEventListener( 'load', function () {
50
51 Cache.add( url, this );
52
53 if ( onLoad ) onLoad( this );
54
55 scope.manager.itemEnd( url );
56
57 }, false );
58
59 /*
60 image.addEventListener( 'progress', function ( event ) {
61
62 if ( onProgress ) onProgress( event );
63
64 }, false );
65 */
66
67 image.addEventListener( 'error', function ( event ) {
68
69 if ( onError ) onError( event );
70
71 scope.manager.itemEnd( url );
72 scope.manager.itemError( url );
73
74 }, false );
75
76 if ( url.substr( 0, 5 ) !== 'data:' ) {
77
78 if ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;
79
80 }
81
82 scope.manager.itemStart( url );
83
84 image.src = url;
85
86 return image;
87
88 },
89
90 setCrossOrigin: function ( value ) {
91
92 this.crossOrigin = value;
93 return this;
94
95 },
96
97 setPath: function ( value ) {
98
99 this.path = value;
100 return this;
101
102 }
103
104} );
105
106
107export { ImageLoader };