-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathimageloader.js
86 lines (67 loc) · 1.29 KB
/
imageloader.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
var __id = 0;
function getId() {
return ++__id;
}
function noop() {
}
function loadImage(images, callback, timeout) {
var key, item, count, success, timeoutId, isTimeout;
count = 0;
success = true;
isTimeout = false;
callback = callback || noop;
for (key in images) {
if (!images.hasOwnProperty(key))
continue;
item = images[key];
if (typeof (item) == 'string') {
item = images[key] = {
src: item
};
}
if (!item || !item.src)
continue;
count++;
item.id = '__img_' + key + getId();
item.img = window[item.id] = new Image();
doLoad(item);
}
if (!count) {
callback(success);
} else if (timeout) {
timeoutId = setTimeout(onTimeout, timeout);
}
function doLoad(item) {
var img = item.img,
id = item.id;
item.status = "loading";
img.onload = function () {
success = success && true;
item.status = "loaded";
done();
};
img.onerror = function () {
success = false;
item.status = "error";
done();
};
img.src = item.src;
function done() {
img.onload = img.onerror = null;
try {
delete window[id];
}
catch (e) {
}
if (!--count && !isTimeout) {
clearTimeout(timeoutId);
callback(success);
}
}
}
function onTimeout() {
isTimeout = true;
callback(false);
}
}
module.exports = loadImage;