scroll-padlock
Version:
Locks elements scroll handling scrollbar gaps and iOS Safari with CSS variables
3 lines (2 loc) • 11.9 kB
JavaScript
function ownKeys(e,t){var l=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),l.push.apply(l,i)}return l}function _objectSpread(e){for(var t=1;t<arguments.length;t++){var l=null!=arguments[t]?arguments[t]:{};t%2?ownKeys(Object(l),!0).forEach((function(t){_defineProperty(e,t,l[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(l)):ownKeys(Object(l)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(l,t))}))}return e}function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _defineProperties(e,t){for(var l=0;l<t.length;l++){var i=t[l];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function _createClass(e,t,l){return t&&_defineProperties(e.prototype,t),l&&_defineProperties(e,l),e}function _classPrivateFieldGet(e,t){return _classApplyDescriptorGet(e,_classExtractFieldDescriptor(e,t,"get"))}function _classApplyDescriptorGet(e,t){return t.get?t.get.call(e):t.value}function _classPrivateFieldSet(e,t,l){return _classApplyDescriptorSet(e,_classExtractFieldDescriptor(e,t,"set"),l),l}function _classExtractFieldDescriptor(e,t,l){if(!t.has(e))throw new TypeError("attempted to "+l+" private field on non-instance");return t.get(e)}function _classApplyDescriptorSet(e,t,l){if(t.set)t.set.call(e,l);else{if(!t.writable)throw new TypeError("attempted to set read only private field");t.value=l}}function _defineProperty(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}!function(e,t){"object"===("undefined"==typeof exports?"undefined":_typeof(exports))&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).ScrollPadlock=t()}(this,(function(){"use strict";var e=window,t=document,l=t.documentElement,i=t.body,r=t.head,a="-",s="scroll",n="resize",o="Width",c="Height",d="Left",u="add",v="remove",p="scroll-padlock",f="data-scroll-padlock",h=function(e){return e.toLowerCase()},_=h("Top"),P=h(d),y=h(o),F=h(c),w="outerWidth",b="outerHeight",G="innerWidth",k="innerHeight",g="scrollWidth",m="scrollHeight",W="scrollbarWidth",M="scrollbarHeight",S="--scroll-padlock-scroll-"+_,O="--scroll-padlock-scroll-"+P,j="--scroll-padlock-scrollbar-"+y,E="--scroll-padlock-scrollbar-"+F,H="--scroll-padlock-outer-"+y,T="--scroll-padlock-outer-"+F,D="--scroll-padlock-inner-"+y,C="--scroll-padlock-inner-"+F,x="--scroll-padlock-scroll-"+y,A="--scroll-padlock-scroll-"+F,L=function(e,t,l,i){var r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4];return null==t?void 0:t["".concat(e,"EventListener")](l,i,r)},I=e.clearImmediate||e.clearTimeout,R=e.setImmediate||e.setTimeout,K=function(e){var t;return function(){for(var l=arguments.length,i=new Array(l),r=0;r<l;r++)i[r]=arguments[r];I(t),t=R((function(){return e.apply(null,i)}))}},z=function(e,t){var l,i,r,a,s,n,o,c,d,u,v,p=(_defineProperty(l={},y,null==t?void 0:t.innerWidth),_defineProperty(l,F,null==t?void 0:t.innerHeight),l);p[y]||p[F]||(p=null!==(v=null==e?void 0:e.getBoundingClientRect())&&void 0!==v?v:{});var f=null!==(i=null===(r=p)||void 0===r?void 0:r[y])&&void 0!==i?i:0,h=null!==(a=null===(s=p)||void 0===s?void 0:s[F])&&void 0!==a?a:0,_=null!==(n=null==e?void 0:e.clientWidth)&&void 0!==n?n:0,P=null!==(o=null==e?void 0:e.clientHeight)&&void 0!==o?o:0;return _defineProperty(u={},w,f),_defineProperty(u,b,h),_defineProperty(u,G,Math.min(f,_)),_defineProperty(u,k,Math.min(h,P)),_defineProperty(u,g,null!==(c=null==e?void 0:e.scrollWidth)&&void 0!==c?c:0),_defineProperty(u,m,null!==(d=null==e?void 0:e.scrollHeight)&&void 0!==d?d:0),_defineProperty(u,W,Math.max(0,f-_)),_defineProperty(u,M,Math.max(0,h-P)),u},X=function(e){var t,l,i,r,a,s,n;return _defineProperty(n={},_,null!==(t=null!==(l=null!==(i=null==e?void 0:e.scrollY)&&void 0!==i?i:null==e?void 0:e.pageYOffset)&&void 0!==l?l:null==e?void 0:e.scrollTop)&&void 0!==t?t:0),_defineProperty(n,P,null!==(r=null!==(a=null!==(s=null==e?void 0:e.scrollX)&&void 0!==s?s:null==e?void 0:e.pageXOffset)&&void 0!==a?a:null==e?void 0:e.scrollLeft)&&void 0!==r?r:0),n},Y=function(e){var t;return null!==(t=null==e?void 0:e.parentElement)&&void 0!==t?t:null},B=function(e,t,l,i,r){var s,n,o;null!=l&&l.contains(t)||!t||l.appendChild(t);var c=null!==(s=null==e?void 0:e.getAttribute(f))&&void 0!==s?s:function(e){for(var t=-1;e;)t++,e=Y(e);return t}(e)+a+function(e){for(var t,l,i=null!==(t=null===(l=Y(e))||void 0===l?void 0:l.children)&&void 0!==t?t:[],r=0,a=0,s=i.length;a<s;a++){if(i[a]===e)return r;r++}return r}(e);null==e||e.setAttribute(f,c);var d=(null!=t?t:{}).sheet;null!=d&&null!==(n=d.cssRules)&&void 0!==n&&n[0]&&d.deleteRule(0);for(var u=(_defineProperty(o={},S,r[_]),_defineProperty(o,O,r[P]),_defineProperty(o,H,i.outerWidth),_defineProperty(o,T,i.outerHeight),_defineProperty(o,D,i.innerWidth),_defineProperty(o,C,i.innerHeight),_defineProperty(o,x,i.scrollWidth),_defineProperty(o,A,i.scrollHeight),_defineProperty(o,j,i.scrollbarWidth),_defineProperty(o,E,i.scrollbarHeight),o),v=Object.keys(u),p="",h=0,y=v.length;h<y;h++){var F=v[h];p+="".concat(F,": ").concat(u[F],"px;")}return null==d||d.insertRule("[".concat(f,'="').concat(c,'"] { ').concat(p," }"),0),t},q=function(e,t){return null==t||t.remove(),null==e||e.removeAttribute(f),t},J=function(e,t,l,i,r,a){var s;return(s={},_defineProperty(s,u,B),_defineProperty(s,v,q),s)[e](t,l,i,r,a)},N=new WeakMap,Q=l,U="".concat(p,"-locked"),V=new WeakMap,Z=new WeakMap,$=new WeakMap,ee=new WeakMap,te=new WeakMap,le=new WeakMap,ie=new WeakMap,re=new WeakMap,ae=new WeakMap,se=new WeakMap,ne=new WeakMap,oe=new WeakMap,ce=new WeakMap,de=new WeakMap,ue=new WeakMap,ve=new WeakMap,pe=new WeakMap,fe=new WeakMap,he=new WeakMap,_e=new WeakMap,Pe=new WeakMap,ye=new WeakMap,Fe=new WeakMap,we=new WeakMap,be=new WeakMap,Ge=new WeakMap;function ke(){var t;return _defineProperty(t={},n,e),_defineProperty(t,s,_classPrivateFieldGet(this,$)),t}return function(){function a(){var o,c,d,p=this,f=arguments.length>0&&void 0!==arguments[0]?arguments[0]:Q,h=arguments.length>1&&void 0!==arguments[1]?arguments[1]:U;_classCallCheck(this,a),pe.set(this,{get:ke,set:void 0}),V.set(this,{writable:!0,value:Q}),Z.set(this,{writable:!0,value:i}),$.set(this,{writable:!0,value:window}),ee.set(this,{writable:!0,value:void 0}),te.set(this,{writable:!0,value:U}),le.set(this,{writable:!0,value:void 0}),ie.set(this,{writable:!0,value:void 0}),re.set(this,{writable:!0,value:void 0}),ae.set(this,{writable:!0,value:void 0}),se.set(this,{writable:!0,value:!1}),ne.set(this,{writable:!0,value:(d="MutationObserver",d in e?new e.MutationObserver((function(){var e=_classPrivateFieldGet(p,le);_classPrivateFieldGet(p,he).call(p),_classPrivateFieldGet(p,le)!==e&&(_classPrivateFieldGet(p,le)?_classPrivateFieldSet(p,re,_objectSpread({},_classPrivateFieldGet(p,ie))):_classPrivateFieldGet(p,fe).call(p,_classPrivateFieldGet(p,re)))})):null)}),oe.set(this,{writable:!0,value:t.createElement("style")}),ce.set(this,{writable:!0,value:K((function(){_classPrivateFieldGet(p,_e).call(p,_classPrivateFieldGet(p,Pe)),_classPrivateFieldGet(p,Fe).call(p)}))}),de.set(this,{writable:!0,value:K((function(){_classPrivateFieldGet(p,_e).call(p,_classPrivateFieldGet(p,ye)),_classPrivateFieldGet(p,Fe).call(p)}))}),ue.set(this,{writable:!0,value:(o={},_defineProperty(o,n,v),_defineProperty(o,s,v),o)}),ve.set(this,{writable:!0,value:(c={},_defineProperty(c,n,_classPrivateFieldGet(this,ce)),_defineProperty(c,s,_classPrivateFieldGet(this,de)),c)}),fe.set(this,{writable:!0,value:function(e){return _classPrivateFieldGet(p,$).scrollTo(e[P],e[_])}}),he.set(this,{writable:!0,value:function(){var e;return _classPrivateFieldSet(p,le,!(null===(e=_classPrivateFieldGet(p,ee))||void 0===e||!e.contains(_classPrivateFieldGet(p,te))))}}),_e.set(this,{writable:!0,value:function(e){var t,l=_classPrivateFieldGet(p,le);_classPrivateFieldGet(p,be).call(p),null===(t=_classPrivateFieldGet(p,ee))||void 0===t||t.remove(_classPrivateFieldGet(p,te));var i,r=e();l&&(null===(i=_classPrivateFieldGet(p,ee))||void 0===i||i.add(_classPrivateFieldGet(p,te)));return _classPrivateFieldGet(p,we).call(p),r}}),Pe.set(this,{writable:!0,value:function(){return _classPrivateFieldSet(p,ae,z(_classPrivateFieldGet(p,V),_classPrivateFieldGet(p,$)))}}),ye.set(this,{writable:!0,value:function(){return _classPrivateFieldSet(p,ie,X(_classPrivateFieldGet(p,$)))}}),Fe.set(this,{writable:!0,value:function(){return J(u,_classPrivateFieldGet(p,Z),_classPrivateFieldGet(p,oe),r,p.layout,p.scroll)}}),we.set(this,{writable:!0,value:function(){var e;return _classPrivateFieldGet(p,se)?_classPrivateFieldGet(p,se):(null===(e=_classPrivateFieldGet(p,ne))||void 0===e||e.observe(_classPrivateFieldGet(p,Z),{attributes:!0,attributeFilter:["class"],childList:!1,characterData:!1}),_classPrivateFieldSet(p,se,!!_classPrivateFieldGet(p,ne)))}}),be.set(this,{writable:!0,value:function(){var e;return _classPrivateFieldGet(p,se)?(null===(e=_classPrivateFieldGet(p,ne))||void 0===e||e.disconnect(),_classPrivateFieldSet(p,se,!1)):_classPrivateFieldGet(p,se)}}),Ge.set(this,{writable:!0,value:function(e,t){var l=_classPrivateFieldGet(p,ue)[e];return!(!_classPrivateFieldGet(p,V)||!l||l===t)&&(_classPrivateFieldGet(p,ue)[e]=t,L(t,_classPrivateFieldGet(p,pe)[e],e,_classPrivateFieldGet(p,ve)[e]),!0)}});var y=f===e,F=f instanceof HTMLElement;if(!y&&!F)throw new TypeError("Invalid element provided to constructor");F&&_classPrivateFieldSet(this,Z,f);var w=y||f===l||f===i;if(w||_classPrivateFieldSet(this,V,_classPrivateFieldSet(this,Z,_classPrivateFieldSet(this,$,f))),N.has(_classPrivateFieldGet(this,V)))throw new Error("An instance has already been initialized on ".concat(w?"page scroll":"the given element"));N.set(_classPrivateFieldGet(this,V),this),_classPrivateFieldSet(this,ee,_classPrivateFieldGet(this,Z).classList);var b="string"==typeof h&&!!h.length;if(!b)throw new TypeError("Invalid CSS class name provided to constructor");_classPrivateFieldSet(this,te,h),this.update(),_classPrivateFieldGet(this,we).call(this),_classPrivateFieldGet(this,Ge).call(this,n,u),_classPrivateFieldGet(this,Ge).call(this,s,u)}return _createClass(a,[{key:"scroll",get:function(){return _classPrivateFieldGet(this,le)?_classPrivateFieldGet(this,re):_classPrivateFieldGet(this,ie)},set:function(e){_classPrivateFieldGet(this,le)?_classPrivateFieldSet(this,re,e):_classPrivateFieldGet(this,fe).call(this,e)}},{key:"layout",get:function(){return _classPrivateFieldGet(this,ae)}},{key:"unlisten",value:function(e){_classPrivateFieldGet(this,Ge).call(this,e,v)}},{key:"listen",value:function(e){_classPrivateFieldGet(this,Ge).call(this,e,u)}},{key:"destroy",value:function(){_classPrivateFieldGet(this,be).call(this),J(v,_classPrivateFieldGet(this,V),_classPrivateFieldGet(this,oe)),_classPrivateFieldGet(this,Ge).call(this,n,v),_classPrivateFieldGet(this,Ge).call(this,s,v),N.delete(_classPrivateFieldGet(this,V)),_classPrivateFieldSet(this,V,_classPrivateFieldSet(this,Z,_classPrivateFieldSet(this,$,_classPrivateFieldSet(this,ne,_classPrivateFieldSet(this,oe,_classPrivateFieldSet(this,ee,null))))))}},{key:"update",value:function(){var e=this;_classPrivateFieldGet(this,he).call(this),_classPrivateFieldGet(this,_e).call(this,(function(){_classPrivateFieldGet(e,Pe).call(e),_classPrivateFieldGet(e,ye).call(e)})),_classPrivateFieldGet(this,Fe).call(this)}}]),a}()}));
//# sourceMappingURL=scroll-padlock.min.js.map