-
Notifications
You must be signed in to change notification settings - Fork 1
/
show-by-scroll.min.js
1 lines (1 loc) · 1.32 KB
/
show-by-scroll.min.js
1
function ShowByScroll(e,t){var o=Array.prototype.slice.call(e);this.settings=Object.assign({elements:o,className:"show",offsetIndex:.8,delay:0},t),this.queue=[],this.queueTimeout=null,this.bindScroll(),this.checkItems()}!function(e){e&&(e.fn.showByScroll=function(t){new ShowByScroll(e(this),t)})}(jQuery),ShowByScroll.prototype.bindScroll=function(){var e=this.checkItems.bind(this);window.addEventListener("scroll",e),this.unbindScroll=function(){window.removeEventListener("scroll",e)}},ShowByScroll.prototype.checkItems=function(){var e=this.settings,t=this,o=0;e.elements.forEach(function(i){if(!i.classList.contains(e.className)){var s=window.innerHeight*e.offsetIndex+window.scrollY,n=i.getBoundingClientRect().top+window.scrollY,l=i.clientHeight;s>n&&n+l>window.scrollY&&(t.settings.delay>0?t.addToQueue(i):t.showItem(i)),o++}}),0===o&&this.unbindScroll()},ShowByScroll.prototype.showItem=function(e){if(e){var t=this.settings,o=new Event("showedByScroll");e.classList.add(t.className),e.dispatchEvent(o)}},ShowByScroll.prototype.addToQueue=function(e){this.queue.indexOf(e)<0&&(this.queue.push(e),this.queueTimeout||this.waitQueue())},ShowByScroll.prototype.waitQueue=function(){var e=this;this.queueTimeout=setTimeout(function(){var t=e.queue[0];e.showItem(t),e.queue.shift(),e.queue.length?e.waitQueue():e.queueTimeout=null},e.settings.delay)};