From 99195811e86c4d9b792d5f8e52e9f0aa65dd56e6 Mon Sep 17 00:00:00 2001 From: Raymond Hawkins Date: Wed, 26 Apr 2017 00:22:05 -0400 Subject: [PATCH] Fixed onImagesLoaded sometimes loading images multiple times --- js/foundation.util.timerAndImageLoader.js | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/js/foundation.util.timerAndImageLoader.js b/js/foundation.util.timerAndImageLoader.js index cea9d1c0f..cbe85c0ef 100644 --- a/js/foundation.util.timerAndImageLoader.js +++ b/js/foundation.util.timerAndImageLoader.js @@ -58,19 +58,22 @@ function onImagesLoaded(images, callback){ callback(); } - images.each(function() { + images.each(function(){ // Check if image is loaded - if (this.complete || (this.readyState === 4) || (this.readyState === 'complete')) { + if (this.complete && this.naturalWidth !== undefined) { singleImageLoaded(); } - // Force load the image else { - // fix for IE. See https://css-tricks.com/snippets/jquery/fixing-load-in-ie-for-cached-images/ - var src = $(this).attr('src'); - $(this).attr('src', src + (src.indexOf('?') >= 0 ? '&' : '?') + (new Date().getTime())); - $(this).one('load', function() { + // If the above check failed, simulate loading on detached element. + var image = new Image(); + // Still count image as loaded if it finalizes with an error. + var events = "load.zf.images error.zf.images"; + $(image).one(events, function me(event){ + // Unbind the event listeners. We're using 'one' but only one of the two events will have fired. + $(this).off(events, me); singleImageLoaded(); }); + image.src = $(this).attr('src'); } }); -- 2.47.2