This repository has been archived by the owner on Mar 11, 2018. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
sticky.min.js
1 lines (1 loc) · 1.47 KB
/
sticky.min.js
1
(function(e){"use strict";function t(t){return parseInt(e.getComputedStyle(t).height,10)}function l(e,t){var s=this;t=t||{};if(!(s instanceof l)){return new l(e,t)}e.style.position="relative";s.stuckElem=e.querySelector(t.stuckSelector||".sticky__stuck");s.stuckElem.style.position="absolute";s.contentElem=e.querySelector(t.contentSelector||".sticky__content");s.contentElem.style.overflow="auto";s.itemSelector=t.itemSelector||".sticky__item";s.init();s.contentElem.addEventListener("scroll",function(){s.scroll()})}l.prototype.init=function(){var e=this;e.itemElems=[].slice.call(document.querySelectorAll(e.itemSelector));e.heights=[];e.clonedElems=[];e.offsets=[];e.stuckElem.innerHTML="";var l=-1;var s=e.itemElems.length;while(++l<s){var o=t(e.itemElems[l]);e.heights.push(o);e.offsets.push(e.itemElems[l].offsetTop-(e.heights[l-1]||0));var i=e.itemElems[l].cloneNode(true);i.style.cssText="display:none;height:"+o;i.removeAttribute("id");e.clonedElems.push(i);e.stuckElem.appendChild(i)}e.scroll()};l.prototype.scroll=function(){var e=this;var t=e.clonedElems.length;var l=e.contentElem.scrollTop;var s=-1;var o=t;while(o-->0){if(l>=e.offsets[o]){s=o;break}}o=-1;var i=s-1;while(++o<t){if(o!==s&&o!==i){e.clonedElems[o].style.display="none"}}if(s!==-1){var n="0px";if(s>0){e.clonedElems[s-1].style.display="block";n=-1*Math.min(l-e.offsets[s],e.heights[s-1])+"px"}e.stuckElem.style.top=n;e.clonedElems[s].style.display="block"}};if(typeof module==="object"){module.exports=l}else{e.sticky=l}})(this);