diff --git a/dist/echo.js b/dist/echo.js index 7a5efed..dbcb897 100644 --- a/dist/echo.js +++ b/dist/echo.js @@ -66,7 +66,7 @@ echo.render = function () { var nodes = document.querySelectorAll('img[data-echo]'); var length = nodes.length; - var src, elem; + var src, elem, loaded; var view = { l: 0 - offset.l, t: 0 - offset.t, @@ -76,14 +76,17 @@ for (var i = 0; i < length; i++) { elem = nodes[i]; if (inView(elem, view)) { - if (unload) { - elem.setAttribute('data-echo-placeholder', elem.src); + loaded = (elem.src === elem.getAttribute('data-echo')); + if (!loaded) { + if (unload) { + elem.setAttribute('data-echo-placeholder', elem.src); + } + elem.src = elem.getAttribute('data-echo'); + if (!unload) { + elem.removeAttribute('data-echo'); + } + callback(elem, 'load'); } - elem.src = elem.getAttribute('data-echo'); - if (!unload) { - elem.removeAttribute('data-echo'); - } - callback(elem, 'load'); } else if (unload && !!(src = elem.getAttribute('data-echo-placeholder'))) { elem.src = src; elem.removeAttribute('data-echo-placeholder'); diff --git a/dist/echo.min.js b/dist/echo.min.js index d654ac5..dff91f3 100644 --- a/dist/echo.min.js +++ b/dist/echo.min.js @@ -1,2 +1,2 @@ /*! echo.js v1.6.0 | (c) 2014 @toddmotto | https://github.com/toddmotto/echo */ -!function(t,e){"function"==typeof define&&define.amd?define(function(){return e(t)}):"object"==typeof exports?module.exports=e:t.echo=e(t)}(this,function(t){"use strict";var e,n,o,r,c,i={},l=function(){},a=function(t,e){var n=t.getBoundingClientRect();return n.right>=e.l&&n.bottom>=e.t&&n.left<=e.r&&n.top<=e.b},d=function(){(r||!n)&&(clearTimeout(n),n=setTimeout(function(){i.render(),n=null},o))};return i.init=function(n){n=n||{};var a=n.offset||0,u=n.offsetVertical||a,f=n.offsetHorizontal||a,s=function(t,e){return parseInt(t||e,10)};e={t:s(n.offsetTop,u),b:s(n.offsetBottom,u),l:s(n.offsetLeft,f),r:s(n.offsetRight,f)},o=s(n.throttle,250),r=n.debounce!==!1,c=!!n.unload,l=n.callback||l,i.render(),document.addEventListener?(t.addEventListener("scroll",d,!1),t.addEventListener("load",d,!1)):(t.attachEvent("onscroll",d),t.attachEvent("onload",d))},i.render=function(){for(var n,o,r=document.querySelectorAll("img[data-echo]"),d=r.length,u={l:0-e.l,t:0-e.t,b:(t.innerHeight||document.documentElement.clientHeight)+e.b,r:(t.innerWidth||document.documentElement.clientWidth)+e.r},f=0;d>f;f++)o=r[f],a(o,u)?(c&&o.setAttribute("data-echo-placeholder",o.src),o.src=o.getAttribute("data-echo"),c||o.removeAttribute("data-echo"),l(o,"load")):c&&(n=o.getAttribute("data-echo-placeholder"))&&(o.src=n,o.removeAttribute("data-echo-placeholder"),l(o,"unload"));d||i.detach()},i.detach=function(){document.removeEventListener?t.removeEventListener("scroll",d):t.detachEvent("onscroll",d),clearTimeout(n)},i}); \ No newline at end of file +!function(t,e){"function"==typeof define&&define.amd?define(function(){return e(t)}):"object"==typeof exports?module.exports=e:t.echo=e(t)}(this,function(t){"use strict";var e,n,o,r,c,i={},a=function(){},d=function(t,e){var n=t.getBoundingClientRect();return n.right>=e.l&&n.bottom>=e.t&&n.left<=e.r&&n.top<=e.b},l=function(){(r||!n)&&(clearTimeout(n),n=setTimeout(function(){i.render(),n=null},o))};return i.init=function(n){n=n||{};var d=n.offset||0,u=n.offsetVertical||d,f=n.offsetHorizontal||d,s=function(t,e){return parseInt(t||e,10)};e={t:s(n.offsetTop,u),b:s(n.offsetBottom,u),l:s(n.offsetLeft,f),r:s(n.offsetRight,f)},o=s(n.throttle,250),r=n.debounce!==!1,c=!!n.unload,a=n.callback||a,i.render(),document.addEventListener?(t.addEventListener("scroll",l,!1),t.addEventListener("load",l,!1)):(t.attachEvent("onscroll",l),t.attachEvent("onload",l))},i.render=function(){for(var n,o,r,l=document.querySelectorAll("img[data-echo]"),u=l.length,f={l:0-e.l,t:0-e.t,b:(t.innerHeight||document.documentElement.clientHeight)+e.b,r:(t.innerWidth||document.documentElement.clientWidth)+e.r},s=0;u>s;s++)o=l[s],d(o,f)?(r=o.src===o.getAttribute("data-echo"),r||(c&&o.setAttribute("data-echo-placeholder",o.src),o.src=o.getAttribute("data-echo"),c||o.removeAttribute("data-echo"),a(o,"load"))):c&&(n=o.getAttribute("data-echo-placeholder"))&&(o.src=n,o.removeAttribute("data-echo-placeholder"),a(o,"unload"));u||i.detach()},i.detach=function(){document.removeEventListener?t.removeEventListener("scroll",l):t.detachEvent("onscroll",l),clearTimeout(n)},i}); \ No newline at end of file diff --git a/src/echo.js b/src/echo.js index 5b14b29..bf64999 100644 --- a/src/echo.js +++ b/src/echo.js @@ -65,7 +65,7 @@ echo.render = function () { var nodes = document.querySelectorAll('img[data-echo]'); var length = nodes.length; - var src, elem; + var src, elem, loaded; var view = { l: 0 - offset.l, t: 0 - offset.t, @@ -75,14 +75,17 @@ for (var i = 0; i < length; i++) { elem = nodes[i]; if (inView(elem, view)) { - if (unload) { - elem.setAttribute('data-echo-placeholder', elem.src); + loaded = (elem.src === elem.getAttribute('data-echo')); + if (!loaded) { + if (unload) { + elem.setAttribute('data-echo-placeholder', elem.src); + } + elem.src = elem.getAttribute('data-echo'); + if (!unload) { + elem.removeAttribute('data-echo'); + } + callback(elem, 'load'); } - elem.src = elem.getAttribute('data-echo'); - if (!unload) { - elem.removeAttribute('data-echo'); - } - callback(elem, 'load'); } else if (unload && !!(src = elem.getAttribute('data-echo-placeholder'))) { elem.src = src; elem.removeAttribute('data-echo-placeholder');