@danielr1996/sticky-polyfill
Version:
A VanillaJS Polyfill for position: sticky;
3 lines (2 loc) • 2.26 kB
JavaScript
/*! app.min.js file */
!function(e,n,t){var o=[],s={_version:"3.5.0",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0},_q:[],on:function(e,n){var t=this;setTimeout(function(){n(t[e])},0)},addTest:function(e,n,t){o.push({name:e,fn:n,options:t})},addAsyncTest:function(e){o.push({name:null,fn:e})}},i=function(){};i.prototype=s,i=new i;var a=[],l=n.documentElement,c="svg"===l.nodeName.toLowerCase(),r=s._config.usePrefixes?" -webkit- -moz- -o- -ms- ".split(" "):["",""];s._prefixes=r,i.addTest("csspositionsticky",function(){var e="position:",t="sticky",o=function(){return"function"!=typeof n.createElement?n.createElement(arguments[0]):c?n.createElementNS.call(n,"http://www.w3.org/2000/svg",arguments[0]):n.createElement.apply(n,arguments)}("a").style;return o.cssText=e+r.join(t+";"+e).slice(0,-e.length),-1!==o.position.indexOf(t)}),function(){var e,n,t,s,l,c;for(var r in o)if(o.hasOwnProperty(r)){if(e=[],(n=o[r]).name&&(e.push(n.name.toLowerCase()),n.options&&n.options.aliases&&n.options.aliases.length))for(t=0;t<n.options.aliases.length;t++)e.push(n.options.aliases[t].toLowerCase());for(s="function"==typeof n.fn?n.fn():n.fn,l=0;l<e.length;l++)1===(c=e[l].split(".")).length?i[c[0]]=s:(!i[c[0]]||i[c[0]]instanceof Boolean||(i[c[0]]=new Boolean(i[c[0]])),i[c[0]][c[1]]=s),a.push((s?"":"no-")+c.join("-"))}}(),function(e){var n=l.className,t=i._config.classPrefix||"";if(c&&(n=n.baseVal),i._config.enableJSClass){var o=new RegExp("(^|\\s)"+t+"no-js(\\s|$)");n=n.replace(o,"$1"+t+"js$2")}i._config.enableClasses&&(n+=" "+t+e.join(" "+t),c?l.className.baseVal=n:l.className=n)}(a),delete s.addTest,delete s.addAsyncTest;for(var f=0;f<i._q.length;f++)i._q[f]();e.Modernizr=i}(window,document);var html=document.querySelector("html");window.sticky=function(e){var n=Modernizr.csspositionsticky;if(void 0===e)return console.warn("No selector provided"),n;if(!n){var t=document.querySelector(e),o=t.getBoundingClientRect().top,s={position:t.style.position,width:t.style.width,top:t.style.top,left:t.style.left},i={position:"fixed",width:"100%",top:0,left:0};window.addEventListener("scroll",function(){t.getBoundingClientRect().top<=0&&Object.assign(t.style,i),-html.getBoundingClientRect().top<=o&&Object.assign(t.style,s)})}return n};