fixes #2362 loaded event fired in safari
diff --git a/player/js/animation/AnimationItem.js b/player/js/animation/AnimationItem.js
index 2d29d8a..60a978e 100644
--- a/player/js/animation/AnimationItem.js
+++ b/player/js/animation/AnimationItem.js
@@ -49,7 +49,7 @@
this.renderer = new HybridRenderer(this, params.rendererSettings);
break;
}
- this.imagePreloader.setCacheType(animType);
+ this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);
this.renderer.setProjectInterface(this.projectInterface);
this.animType = animType;
if (params.loop === ''
diff --git a/player/js/utils/imagePreloader.js b/player/js/utils/imagePreloader.js
index b3afb2d..1dc2790 100644
--- a/player/js/utils/imagePreloader.js
+++ b/player/js/utils/imagePreloader.js
@@ -37,15 +37,32 @@
return path;
}
+ function testImageLoaded(img) {
+ var _count = 0;
+ var intervalId = setInterval(function() {
+ var box = img.getBBox();
+ if (box.width || _count > 500) {
+ this._imageLoaded();
+ clearInterval(intervalId);
+ }
+ _count += 1;
+ }.bind(this), 50)
+ }
+
function createImageData(assetData) {
var path = getAssetsPath(assetData, this.assetsPath, this.path);
var img = createNS('image');
- img.addEventListener('load', this._imageLoaded, false);
+ if (isSafari) {
+ this.testImageLoaded(img)
+ } else {
+ img.addEventListener('load', this._imageLoaded, false);
+ }
img.addEventListener('error', function() {
ob.img = proxyImage;
this._imageLoaded();
}.bind(this), false);
img.setAttributeNS('http://www.w3.org/1999/xlink','href', path);
+ this._elementHelper.append(img);
var ob = {
img: img,
assetData: assetData
@@ -108,8 +125,9 @@
return this.totalImages === this.loadedAssets;
}
- function setCacheType(type) {
+ function setCacheType(type, elementHelper) {
if (type === 'svg') {
+ this._elementHelper = elementHelper;
this._createImageData = this.createImageData.bind(this);
} else {
this._createImageData = this.createImgData.bind(this);
@@ -118,6 +136,7 @@
function ImagePreloader(type){
this._imageLoaded = imageLoaded.bind(this);
+ this.testImageLoaded = testImageLoaded.bind(this);
this.assetsPath = '';
this.path = '';
this.totalImages = 0;