lazyload.js
6.98 KB
!function(e,t){var n=function(a,m){"use strict";if(!m.getElementsByClassName)return;var y,z,h=m.documentElement,s=a.Date,i=a.HTMLPictureElement,r="addEventListener",v="getAttribute",t=a[r],u=a.setTimeout,n=a.requestAnimationFrame||u,o=a.requestIdleCallback,f=/^picture$/i,l=["load","error","lazyincluded","_lazyloaded"],c={},p=Array.prototype.forEach,d=function(e,t){return c[t]||(c[t]=new RegExp("(\\s|^)"+t+"(\\s|$)")),c[t].test(e[v]("class")||"")&&c[t]},g=function(e,t){d(e,t)||e.setAttribute("class",(e[v]("class")||"").trim()+" "+t)},C=function(e,t){var n;(n=d(e,t))&&e.setAttribute("class",(e[v]("class")||"").replace(n," "))},b=function(t,n,e){var a=e?r:"removeEventListener";e&&b(t,n),l.forEach(function(e){t[a](e,n)})},A=function(e,t,n,a,i){var s=m.createEvent("Event");return n||(n={}),n.instance=y,s.initEvent(t,!a,!i),s.detail=n,e.dispatchEvent(s),s},E=function(e,t){var n;!i&&(n=a.picturefill||z.pf)?(t&&t.src&&!e[v]("srcset")&&e.setAttribute("srcset",t.src),n({reevaluate:!0,elements:[e]})):t&&t.src&&(e.src=t.src)},_=function(e,t){return(getComputedStyle(e,null)||{})[t]},N=function(e,t,n){for(n=n||e.offsetWidth;n<z.minSize&&t&&!e._lazysizesWidth;)n=t.offsetWidth,t=t.parentNode;return n},w=(T=[],B=[],F=T,S=function(){var e=F;for(F=T.length?B:T,W=!(x=!0);e.length;)e.shift()();x=!1},L=function(e,t){x&&!t?e.apply(this,arguments):(F.push(e),W||(W=!0,(m.hidden?u:n)(S)))},L._lsFlush=S,L),e=function(n,e){return e?function(){w(n)}:function(){var e=this,t=arguments;w(function(){n.apply(e,t)})}},M=function(e){var t,n,a=function(){t=null,e()},i=function(){var e=s.now()-n;e<99?u(i,99-e):(o||a)(a)};return function(){n=s.now(),t||(t=u(i,99))}};var x,W,T,B,F,S,L;!function(){var e,t={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",errorClass:"lazyerror",autosizesClass:"lazyautosizes",srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:!0,expFactor:1.5,hFac:.8,loadMode:2,loadHidden:!0,ricTimeout:0,throttleDelay:125,placeholder:""};for(e in z=a.lazySizesConfig||a.lazysizesConfig||{},t)e in z||(z[e]=t[e]);a.lazySizesConfig=z,u(function(){z.init&&D()})}();var R=(oe=/^img$/i,le=/^iframe$/i,ce="onscroll"in a&&!/(gle|ing)bot/.test(navigator.userAgent),de=0,ue=0,fe=-1,me=function(e){ue--,(!e||ue<0||!e.target)&&(ue=0)},ye=function(e){return null==Z&&(Z="hidden"==_(m.body,"visibility")),Z||"hidden"!=_(e.parentNode,"visibility")&&"hidden"!=_(e,"visibility")},ze=function(e,t){var n,a=e,i=ye(e);for(U-=t,Y+=t,V-=t,X+=t;i&&(a=a.offsetParent)&&a!=m.body&&a!=h;)(i=0<(_(a,"opacity")||1))&&"visible"!=_(a,"overflow")&&(n=a.getBoundingClientRect(),i=X>n.left&&V<n.right&&Y>n.top-1&&U<n.bottom+1);return i},he=function(e){if(z.placeholder&&e){var t=Array.prototype.slice.apply(e);t.forEach(function(e){var t=oe.test(e.nodeName);t&&!e[v]("src")&&(e.src=z.placeholder)})}},ve=function(){var e,t,n,a,i,s,r,o,l,c,d,u,f=y.elements;if(he(f),(G=z.loadMode)&&ue<8&&(e=f.length)){for(t=0,fe++,c=!z.expand||z.expand<1?500<h.clientHeight&&500<h.clientWidth?500:370:z.expand,y._defEx=c,d=c*z.expFactor,u=z.hFac,Z=null,de<d&&ue<1&&2<fe&&2<G&&!m.hidden?(de=d,fe=0):de=1<G&&1<fe&&ue<6?c:0;t<e;t++)if(f[t]&&!f[t]._lazyRace)if(ce)if((o=f[t][v]("data-expand"))&&(s=1*o)||(s=de),l!==s&&(K=innerWidth+s*u,Q=innerHeight+s,r=-1*s,l=s),n=f[t].getBoundingClientRect(),(Y=n.bottom)>=r&&(U=n.top)<=Q&&(X=n.right)>=r*u&&(V=n.left)<=K&&(Y||X||V||U)&&(z.loadHidden||ye(f[t]))&&(q&&ue<3&&!o&&(G<3||fe<4)||ze(f[t],s))){if(_e(f[t]),i=!0,9<ue)break}else!i&&q&&!a&&ue<4&&fe<4&&2<G&&(I[0]||z.preloadAfterLoad)&&(I[0]||!o&&(Y||X||V||U||"auto"!=f[t][v](z.sizesAttr)))&&(a=I[0]||f[t]);else _e(f[t]);a&&!i&&_e(a)}},ee=ve,ne=0,ae=z.throttleDelay,ie=z.ricTimeout,se=function(){te=!1,ne=s.now(),ee()},re=o&&49<ie?function(){o(se,{timeout:ie}),ie!==z.ricTimeout&&(ie=z.ricTimeout)}:e(function(){u(se)},!0),pe=function(e){var t;(e=!0===e)&&(ie=33),te||(te=!0,(t=ae-(s.now()-ne))<0&&(t=0),e||t<9?re():u(re,t))},ge=function(e){var t=e.target;t._lazyCache?delete t._lazyCache:(me(e),g(t,z.loadedClass),C(t,z.loadingClass),b(t,be),A(t,"lazyloaded"))},Ce=e(ge),be=function(e){Ce({target:e.target})},Ae=function(e){var t,n=e[v](z.srcsetAttr);(t=z.customMedia[e[v]("data-media")||e[v]("media")])&&e.setAttribute("media",t),n&&e.setAttribute("srcset",n)},Ee=e(function(e,t,n,a,i){var s,r,o,l,c,d;(c=A(e,"lazybeforeunveil",t)).defaultPrevented||(a&&(n?g(e,z.autosizesClass):e.setAttribute("sizes",a)),r=e[v](z.srcsetAttr),s=e[v](z.srcAttr),i&&(o=e.parentNode,l=o&&f.test(o.nodeName||"")),d=t.firesLoad||"src"in e&&(r||s||l),c={target:e},g(e,z.loadingClass),d&&(clearTimeout(j),j=u(me,2500),b(e,be,!0)),l&&p.call(o.getElementsByTagName("source"),Ae),r?e.setAttribute("srcset",r):s&&!l&&(le.test(e.nodeName)?function(t,n){try{t.contentWindow.location.replace(n)}catch(e){t.src=n}}(e,s):e.src=s),i&&(r||l)&&E(e,{src:s})),e._lazyRace&&delete e._lazyRace,C(e,z.lazyClass),w(function(){(!d||e.complete&&1<e.naturalWidth)&&(ge(c),e._lazyCache=!0,u(function(){"_lazyCache"in e&&delete e._lazyCache},9))},!0)}),_e=function(e){var t,n=oe.test(e.nodeName),a=n&&(e[v](z.sizesAttr)||e[v]("sizes")),i="auto"==a;(!i&&q||!n||!e[v]("src")&&!e.srcset||e.complete||d(e,z.errorClass)||!d(e,z.lazyClass))&&(t=A(e,"lazyunveilread").detail,i&&k.updateElem(e,!0,e.offsetWidth),e._lazyRace=!0,ue++,Ee(e,t,i,a,n))},Ne=function(){if(!q)if(s.now()-J<999)u(Ne,999);else{var e=M(function(){z.loadMode=3,pe()});q=!0,z.loadMode=3,pe(),t("scroll",function(){3==z.loadMode&&(z.loadMode=2),e()},!0)}},{_:function(){J=s.now(),y.elements=m.getElementsByClassName(z.lazyClass),I=m.getElementsByClassName(z.lazyClass+" "+z.preloadClass),he(y.elements),t("scroll",pe,!0),t("resize",pe,!0),a.MutationObserver?new MutationObserver(pe).observe(h,{childList:!0,subtree:!0,attributes:!0}):(h[r]("DOMNodeInserted",pe,!0),h[r]("DOMAttrModified",pe,!0),setInterval(pe,999)),t("hashchange",pe,!0),["focus","mouseover","click","load","transitionend","animationend","webkitAnimationEnd"].forEach(function(e){m[r](e,pe,!0)}),/d$|^c/.test(m.readyState)?Ne():(t("load",Ne),m[r]("DOMContentLoaded",pe),u(Ne,2e4)),y.elements.length?(ve(),w._lsFlush()):pe()},checkElems:pe,unveil:_e}),k=(O=e(function(e,t,n,a){var i,s,r;if(e._lazysizesWidth=a,a+="px",e.setAttribute("sizes",a),f.test(t.nodeName||""))for(i=t.getElementsByTagName("source"),s=0,r=i.length;s<r;s++)i[s].setAttribute("sizes",a);n.detail.dataAttr||E(e,n.detail)}),P=function(e,t,n){var a,i=e.parentNode;i&&(n=N(e,i,n),(a=A(e,"lazybeforesizes",{width:n,dataAttr:!!t})).defaultPrevented||(n=a.detail.width)&&n!==e._lazysizesWidth&&O(e,i,a,n))},$=M(function(){var e,t=H.length;if(t)for(e=0;e<t;e++)P(H[e])}),{_:function(){H=m.getElementsByClassName(z.autosizesClass),t("resize",$)},checkElems:$,updateElem:P}),D=function(){D.i||(D.i=!0,k._(),R._())};var H,O,P,$;var I,q,j,G,J,K,Q,U,V,X,Y,Z,ee,te,ne,ae,ie,se,re,oe,le,ce,de,ue,fe,me,ye,ze,he,ve,pe,ge,Ce,be,Ae,Ee,_e,Ne;return y={cfg:z,autoSizer:k,loader:R,init:D,uP:E,aC:g,rC:C,hC:d,fire:A,gW:N,rAF:w}}(e,e.document);"object"==typeof module&&module.exports?module.exports=n:"function"==typeof define&&define.amd?define(n):e.lazySizes=n}(window);