1 |
|
2 |
|
3 |
|
4 |
|
5 | import { Cache } from './Cache.js';
|
6 | import { DefaultLoadingManager } from './LoadingManager.js';
|
7 |
|
8 |
|
9 | function ImageLoader( manager ) {
|
10 |
|
11 | this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;
|
12 |
|
13 | }
|
14 |
|
15 | Object.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 |
|
61 |
|
62 |
|
63 |
|
64 |
|
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 |
|
107 | export { ImageLoader };
|