console.log("this is running") var jsObserver, lazyLoadJs = {}; document.addEventListener('DOMContentLoaded', function () { if ( !( 'IntersectionObserver' in window ) ) { // https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API#See_also getScript('https://cdn.jsdelivr.net/npm/intersection-observer@0.11.0/intersection-observer.js', initLazyJS ); } else { initLazyJS(); } }); // https://stackoverflow.com/a/28002292 or use jQuery's $.getScript to reduce duplicate/unnecessary code function getScript(source, callback) { var script = document.createElement('script'); var prior = document.getElementsByTagName('script')[0]; script.async = 1; script.onload = script.onreadystatechange = function( _, isAbort ) { if(isAbort || !script.readyState || /loaded|complete/.test(script.readyState) ) { script.onload = script.onreadystatechange = null; script = undefined; if(!isAbort && callback) setTimeout(callback, 0); } }; script.src = source; prior.parentNode.insertBefore(script, prior); } // https://vanillajstoolkit.com/helpers/isinviewport/ function isInViewport(elem) { var distance = elem.getBoundingClientRect(); return ( distance.top >= 0 && distance.left >= 0 && distance.bottom <= (window.innerHeight || document.documentElement.clientHeight) && distance.right <= (window.innerWidth || document.documentElement.clientWidth) ); } function initLazyJS() { var options = { root: null, rootMargin: '50px', threshold: 0 }; jsObserver = new IntersectionObserver( function (entries) { for ( var i = 0; i