- 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
import { imgList } from "../cache.js";
import { fetchData } from "./fetchdata.js";
import * as fileUtil from "./../../utils/file.js";
/**
* parse/preload an image
* @param {loader.Asset} img
* @param {Function} [onload] - function to be called when the resource is loaded
* @param {Function} [onerror] - function to be called in case of error
* @returns {number} the amount of corresponding resource parsed/preloaded
* @ignore
* @example
* preloadImages([
* { name : 'image1', src : 'images/image1.png'},
* { name : 'image2', src : 'images/image2.png'},
* { name : 'image3', src : 'images/image3.png'},
* { name : 'image4', src : 'images/image4.png'}
* ]);
*/
export function preloadImage(img, onload, onerror) {
if (typeof imgList[img.name] !== "undefined") {
// already loaded
return 0;
}
// handle SVG file loading
if (fileUtil.getExtension(img.src) === "svg") {
// handle SVG file
fetchData(img.src, "text")
.then(svgText => {
const svgImage = new Image();
svgImage.onload = function() {
imgList[img.name] = svgImage;
if (typeof onload === "function") {
// callback
onload();
}
};
svgImage.onerror = function(error) {
if (typeof onerror === "function") {
onerror(error);
}
};
svgImage.src = "data:image/svg+xml;charset=utf8," + encodeURIComponent(svgText);
})
.catch(error => {
if (typeof onerror === "function") {
onerror(error);
}
});
} else {
// handle all other image files
fetchData(img.src, "blob")
.then(blob => {
globalThis.createImageBitmap(blob)
.then((bitmap) => {
imgList[img.name] = bitmap;
if (typeof onload === "function") {
// callback
onload();
}
});
})
.catch(error => {
if (typeof onerror === "function") {
onerror(error);
}
});
}
return 1;
}