@devpodio/perfect-scrollbar
Version:
Minimalistic but perfect custom scrollbar plugin
10 lines (8 loc) • 20.5 kB
JavaScript
/**
* @devpodio/perfect-scrollbar - v1.5.1
* Minimalistic but perfect custom scrollbar plugin
* undefined
* Made by Uni Sayo <unibtc@gmail.com>
* Under MIT License
*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self).PerfectScrollbar=e()}(this,function(){"use strict";function t(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function e(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function n(t,n,i){return n&&e(t.prototype,n),i&&e(t,i),t}function i(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=[],i=!0,r=!1,l=void 0;try{for(var o,s=t[Symbol.iterator]();!(i=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);i=!0);}catch(t){r=!0,l=t}finally{try{i||null==s.return||s.return()}finally{if(r)throw l}}return n}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function r(t){return getComputedStyle(t)}function l(t,e){for(var n in e){var i=e[n];"number"==typeof i&&(i="".concat(i,"px")),t.style[n]=i}return t}function o(t){var e=document.createElement("div");return e.className=t,e}var s="undefined"!=typeof Element&&(Element.prototype.matches||Element.prototype.webkitMatchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector);function a(t,e){if(!s)throw new Error("No element matching method supported");return s.call(t,e)}function c(t){t.remove?t.remove():t.parentNode&&t.parentNode.removeChild(t)}function h(t,e){return Array.prototype.filter.call(t.children,function(t){return a(t,e)})}window.raf=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return setTimeout(t,16)},window.caf=window.cancelAnimationFrame||window.webkitCancelRequestAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelRequestAnimationFrame||window.mozCancelAnimationFrame||window.oCancelRequestAnimationFrame||window.oCancelAnimationFrame||window.msCancelRequestAnimationFrame||window.msCancelAnimationFrame||function(t){return clearTimeout(t)};var u={main:"ps",element:{thumb:function(t){return"ps__thumb-".concat(t)},rail:function(t){return"ps__rail-".concat(t)},consuming:"ps__child--consume"},state:{focus:"ps--focus",clicking:"ps--clicking",active:function(t){return"ps--active-".concat(t)},scrolling:function(t){return"ps--scrolling-".concat(t)}}},d={x:null,y:null};function f(t,e){var n=t.element.classList,i=u.state.scrolling(e);n.contains(i)?clearTimeout(d[e]):n.add(i)}function p(t,e){d[e]=setTimeout(function(){return t.isAlive&&t.element.classList.remove(u.state.scrolling(e))},t.settings.scrollingThreshold)}var b=!1;try{var g={get passive(){b=!0}};window.addEventListener("test",g,g),window.removeEventListener("test",g,g)}catch(t){b=!1}var v=function(){function e(n){t(this,e),this.element=n,this.handlers={},this.eventOptions=!!b&&{passive:!1,capture:!1}}return n(e,[{key:"bind",value:function(t,e){void 0===this.handlers[t]&&(this.handlers[t]=[]),this.handlers[t].push(e),this.element.addEventListener(t,e,this.eventOptions)}},{key:"unbind",value:function(t,e){var n=this;this.handlers[t]=this.handlers[t].filter(function(i){return!(!e||i===e)||(n.element.removeEventListener(t,i,n.eventOptions),!1)})}},{key:"unbindAll",value:function(){for(var t in this.handlers)this.unbind(t)}},{key:"isEmpty",get:function(){var t=this;return Object.keys(this.handlers).every(function(e){return 0===t.handlers[e].length})}}]),e}(),m=function(){function e(){t(this,e),this.eventElements=[]}return n(e,[{key:"eventElement",value:function(t){var e=this.eventElements.filter(function(e){return e.element===t})[0];return e||(e=new v(t),this.eventElements.push(e)),e}},{key:"bind",value:function(t,e,n){this.eventElement(t).bind(e,n)}},{key:"unbind",value:function(t,e,n){var i=this.eventElement(t);i.unbind(e,n),i.isEmpty&&this.eventElements.splice(this.eventElements.indexOf(i),1)}},{key:"unbindAll",value:function(){this.eventElements.forEach(function(t){return t.unbindAll()}),this.eventElements=[]}},{key:"once",value:function(t,e,n){var i=this.eventElement(t);i.bind(e,function t(r){i.unbind(e,t),n(r)})}}]),e}();function w(t){if("function"==typeof window.CustomEvent)return new CustomEvent(t);var e=document.createEvent("CustomEvent");return e.initCustomEvent(t,!1,!1,void 0),e}function Y(t,e,n){var r,l=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];if("top"===e)r=["contentHeight","containerHeight","scrollTop","y","up","down"];else{if("left"!==e)throw new Error("A proper axis should be provided");r=["contentWidth","containerWidth","scrollLeft","x","left","right"]}!function(t,e,n){var r=i(n,6),l=r[0],o=r[1],s=r[2],a=r[3],c=r[4],h=r[5],u=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],d=arguments.length>4&&void 0!==arguments[4]&&arguments[4],b=t.element;t.reach[a]=null,b[s]<1&&(t.reach[a]="start");b[s]>t[l]-t[o]-1&&(t.reach[a]="end");e&&(b.dispatchEvent(w("ps-scroll-".concat(a))),e<0?b.dispatchEvent(w("ps-scroll-".concat(c))):e>0&&b.dispatchEvent(w("ps-scroll-".concat(h))),u&&function(t,e){f(t,e),p(t,e)}(t,a));t.reach[a]&&(e||d)&&b.dispatchEvent(w("ps-".concat(a,"-reach-").concat(t.reach[a])))}(t,n,r,l,o)}function y(t){return parseInt(t,10)||0}var X={isWebKit:"undefined"!=typeof document&&"WebkitAppearance"in document.documentElement.style,supportsTouch:"undefined"!=typeof window&&("ontouchstart"in window||window.DocumentTouch&&document instanceof window.DocumentTouch),supportsIePointer:"undefined"!=typeof navigator&&navigator.msMaxTouchPoints,isChrome:"undefined"!=typeof navigator&&/Chrome/i.test(navigator&&navigator.userAgent)},W={id:null};function L(t){W.id&&window.caf(W.id),W.id=window.raf(function(){return function(t){W.id&&(W.id=null);!function(t){var e=t.element,n=Math.floor(e.scrollTop);t.containerWidth=e.clientWidth,t.containerHeight=e.clientHeight,t.contentWidth=e.scrollWidth,t.contentHeight=e.scrollHeight,e.contains(t.scrollbarXRail)||(h(e,u.element.rail("x")).forEach(function(t){return c(t)}),e.appendChild(t.scrollbarXRail));e.contains(t.scrollbarYRail)||(h(e,u.element.rail("y")).forEach(function(t){return c(t)}),e.appendChild(t.scrollbarYRail));!t.settings.suppressScrollX&&t.containerWidth+t.settings.scrollXMarginOffset<t.contentWidth?(t.scrollbarXActive=!0,t.railXWidth=t.containerWidth-t.railXMarginWidth,t.railXRatio=t.containerWidth/t.railXWidth,t.scrollbarXWidth=R(t,y(t.railXWidth*t.containerWidth/t.contentWidth)),t.scrollbarXLeft=y((t.negativeScrollAdjustment+e.scrollLeft)*(t.railXWidth-t.scrollbarXWidth)/(t.contentWidth-t.containerWidth))):t.scrollbarXActive=!1;!t.settings.suppressScrollY&&t.containerHeight+t.settings.scrollYMarginOffset<t.contentHeight?(t.scrollbarYActive=!0,t.railYHeight=t.containerHeight-t.railYMarginHeight,t.railYRatio=t.containerHeight/t.railYHeight,t.scrollbarYHeight=R(t,y(t.railYHeight*t.containerHeight/t.contentHeight)),t.scrollbarYTop=y(n*(t.railYHeight-t.scrollbarYHeight)/(t.contentHeight-t.containerHeight))):t.scrollbarYActive=!1;t.scrollbarXLeft>=t.railXWidth-t.scrollbarXWidth&&(t.scrollbarXLeft=t.railXWidth-t.scrollbarXWidth);t.scrollbarYTop>=t.railYHeight-t.scrollbarYHeight&&(t.scrollbarYTop=t.railYHeight-t.scrollbarYHeight);(function(t,e){var n={width:e.railXWidth},i=Math.floor(t.scrollTop);e.isRtl?n.left=e.negativeScrollAdjustment+t.scrollLeft+e.containerWidth-e.contentWidth:n.left=t.scrollLeft,e.isScrollbarXUsingBottom?n.bottom=e.scrollbarXBottom-i:n.top=e.scrollbarXTop+i,l(e.scrollbarXRail,n);var r={top:i,height:e.railYHeight};e.isScrollbarYUsingRight?e.isRtl?r.right=e.contentWidth-(e.negativeScrollAdjustment+t.scrollLeft)-e.scrollbarYRight-e.scrollbarYOuterWidth:r.right=e.scrollbarYRight-t.scrollLeft:e.isRtl?r.left=e.negativeScrollAdjustment+t.scrollLeft+2*e.containerWidth-e.contentWidth-e.scrollbarYLeft-e.scrollbarYOuterWidth:r.left=e.scrollbarYLeft+t.scrollLeft,l(e.scrollbarYRail,r),l(e.scrollbarX,{left:e.scrollbarXLeft,width:e.scrollbarXWidth-e.railBorderXWidth}),l(e.scrollbarY,{top:e.scrollbarYTop,height:e.scrollbarYHeight-e.railBorderYWidth})})(e,t),t.scrollbarXActive?e.classList.add(u.state.active("x")):(e.classList.remove(u.state.active("x")),t.scrollbarXWidth=0,t.scrollbarXLeft=0,e.scrollLeft=0);t.scrollbarYActive?e.classList.add(u.state.active("y")):(e.classList.remove(u.state.active("y")),t.scrollbarYHeight=0,t.scrollbarYTop=0,e.scrollTop=0)}(t)}(t)})}function R(t,e){return t.settings.minScrollbarLength&&(e=Math.max(e,t.settings.minScrollbarLength)),t.settings.maxScrollbarLength&&(e=Math.min(e,t.settings.maxScrollbarLength)),e}function T(t,e){var n=i(e,9),r=n[0],l=n[1],o=n[2],s=n[3],a=n[4],c=n[5],h=n[6],d=n[7],b=n[8],g=t.element,v=null,m=null,w=null;function Y(e){g[h]=v+w*(e[o]-m),f(t,d),L(t),e.stopPropagation(),e.preventDefault()}function y(){p(t,d),t[b].classList.remove(u.state.clicking),t.event.unbind(t.ownerDocument,"mousemove",Y)}t.event.bind(t[a],"mousedown",function(e){v=g[h],m=e[o],w=(t[l]-t[r])/(t[s]-t[c]),t.event.bind(t.ownerDocument,"mousemove",Y),t.event.once(t.ownerDocument,"mouseup",y),t[b].classList.add(u.state.clicking),e.stopPropagation(),e.preventDefault()})}var H={handlers:["click-rail","drag-thumb","keyboard","wheel","touch"],maxScrollbarLength:null,minScrollbarLength:null,scrollingThreshold:1e3,scrollXMarginOffset:0,scrollYMarginOffset:0,suppressScrollX:!1,suppressScrollY:!1,swipeEasing:!0,useBothWheelAxes:!1,wheelPropagation:!0,wheelSpeed:1,colorX:null,colorY:null},S={"click-rail":function(t){t.element,t.event.bind(t.scrollbarY,"mousedown",function(t){return t.stopPropagation()}),t.event.bind(t.scrollbarYRail,"mousedown",function(e){var n=e.pageY-window.pageYOffset-t.scrollbarYRail.getBoundingClientRect().top>t.scrollbarYTop?1:-1;t.element.scrollTop+=n*t.containerHeight,L(t),e.stopPropagation()}),t.event.bind(t.scrollbarX,"mousedown",function(t){return t.stopPropagation()}),t.event.bind(t.scrollbarXRail,"mousedown",function(e){var n=e.pageX-window.pageXOffset-t.scrollbarXRail.getBoundingClientRect().left>t.scrollbarXLeft?1:-1;t.element.scrollLeft+=n*t.containerWidth,L(t),e.stopPropagation()})},"drag-thumb":function(t){T(t,["containerWidth","contentWidth","pageX","railXWidth","scrollbarX","scrollbarXWidth","scrollLeft","x","scrollbarXRail"]),T(t,["containerHeight","contentHeight","pageY","railYHeight","scrollbarY","scrollbarYHeight","scrollTop","y","scrollbarYRail"])},keyboard:function(t){var e=t.element;t.event.bind(t.ownerDocument,"keydown",function(n){if(!(n.isDefaultPrevented&&n.isDefaultPrevented()||n.defaultPrevented)&&(a(e,":hover")||a(t.scrollbarX,":focus")||a(t.scrollbarY,":focus"))){var i,r=document.activeElement?document.activeElement:t.ownerDocument.activeElement;if(r){if("IFRAME"===r.tagName)r=r.contentDocument.activeElement;else for(;r.shadowRoot;)r=r.shadowRoot.activeElement;if(a(i=r,"input,[contenteditable]")||a(i,"select,[contenteditable]")||a(i,"textarea,[contenteditable]")||a(i,"button,[contenteditable]"))return}var l=0,o=0;switch(n.which){case 37:l=n.metaKey?-t.contentWidth:n.altKey?-t.containerWidth:-30;break;case 38:o=n.metaKey?t.contentHeight:n.altKey?t.containerHeight:30;break;case 39:l=n.metaKey?t.contentWidth:n.altKey?t.containerWidth:30;break;case 40:o=n.metaKey?-t.contentHeight:n.altKey?-t.containerHeight:-30;break;case 32:o=n.shiftKey?t.containerHeight:-t.containerHeight;break;case 33:o=t.containerHeight;break;case 34:o=-t.containerHeight;break;case 36:o=t.contentHeight;break;case 35:o=-t.contentHeight;break;default:return}t.settings.suppressScrollX&&0!==l||t.settings.suppressScrollY&&0!==o||(e.scrollTop-=o,e.scrollLeft+=l,L(t),function(n,i){var r=Math.floor(e.scrollTop);if(0===n){if(!t.scrollbarYActive)return!1;if(0===r&&i>0||r>=t.contentHeight-t.containerHeight&&i<0)return!t.settings.wheelPropagation}var l=e.scrollLeft;if(0===i){if(!t.scrollbarXActive)return!1;if(0===l&&n<0||l>=t.contentWidth-t.containerWidth&&n>0)return!t.settings.wheelPropagation}return!0}(l,o)&&n.preventDefault())}})},wheel:function(t){var e=t.element;function n(n){var l=i(function(t){var e=t.deltaX,n=-1*t.deltaY;return void 0!==e&&void 0!==n||(e=-1*t.wheelDeltaX/6,n=t.wheelDeltaY/6),t.deltaMode&&1===t.deltaMode&&(e*=10,n*=10),e!=e&&n!=n&&(e=0,n=t.wheelDelta),t.shiftKey?[-n,-e]:[e,n]}(n),2),o=l[0],s=l[1];if(!function(t,n,i){if(!X.isWebKit&&e.querySelector("select:focus"))return!0;if(!e.contains(t))return!1;for(var l=t;l&&l!==e;){if(l.classList.contains(u.element.consuming))return!0;var o=r(l);if([o.overflow,o.overflowX,o.overflowY].join("").match(/(scroll|auto)/)){var s=l.scrollHeight-l.clientHeight;if(s>0&&!(0===l.scrollTop&&i>0||l.scrollTop===s&&i<0))return!0;var a=l.scrollWidth-l.clientWidth;if(a>0&&!(0===l.scrollLeft&&n<0||l.scrollLeft===a&&n>0))return!0}l=l.parentNode}return!1}(n.target,o,s)){var a=!1;t.settings.useBothWheelAxes?t.scrollbarYActive&&!t.scrollbarXActive?(s?e.scrollTop-=s*t.settings.wheelSpeed:e.scrollTop+=o*t.settings.wheelSpeed,a=!0):t.scrollbarXActive&&!t.scrollbarYActive&&(o?e.scrollLeft+=o*t.settings.wheelSpeed:e.scrollLeft-=s*t.settings.wheelSpeed,a=!0):(e.scrollTop-=s*t.settings.wheelSpeed,e.scrollLeft+=o*t.settings.wheelSpeed),L(t),(a=a||function(n,i){var r=Math.floor(e.scrollTop),l=0===e.scrollTop,o=r+e.offsetHeight===e.scrollHeight,s=0===e.scrollLeft,a=e.scrollLeft+e.offsetWidth===e.scrollWidth;return!(Math.abs(i)>Math.abs(n)?l||o:s||a)||!t.settings.wheelPropagation}(o,s))&&!n.ctrlKey&&(n.stopPropagation(),n.preventDefault())}}void 0!==window.onwheel?t.event.bind(e,"wheel",n):void 0!==window.onmousewheel&&t.event.bind(e,"mousewheel",n)},touch:function(t){if(X.supportsTouch||X.supportsIePointer){var e=t.element,n={},i=0,l={},o=null;X.supportsTouch?(t.event.bind(e,"touchstart",h),t.event.bind(e,"touchmove",d),t.event.bind(e,"touchend",f)):X.supportsIePointer&&(window.PointerEvent?(t.event.bind(e,"pointerdown",h),t.event.bind(e,"pointermove",d),t.event.bind(e,"pointerup",f)):window.MSPointerEvent&&(t.event.bind(e,"MSPointerDown",h),t.event.bind(e,"MSPointerMove",d),t.event.bind(e,"MSPointerUp",f)))}function s(n,i){e.scrollTop-=i,e.scrollLeft-=n,L(t)}function a(t){return t.targetTouches?t.targetTouches[0]:t}function c(t){return!(t.pointerType&&"pen"===t.pointerType&&0===t.buttons||(!t.targetTouches||1!==t.targetTouches.length)&&(!t.pointerType||"mouse"===t.pointerType||t.pointerType===t.MSPOINTER_TYPE_MOUSE))}function h(t){if(c(t)){var e=a(t);n.pageX=e.pageX,n.pageY=e.pageY,i=(new Date).getTime(),null!==o&&clearInterval(o)}}function d(o){if(c(o)){var h=a(o),d={pageX:h.pageX,pageY:h.pageY},f=d.pageX-n.pageX,p=d.pageY-n.pageY;if(function(t,n,i){if(!e.contains(t))return!1;for(var l=t;l&&l!==e;){if(l.classList.contains(u.element.consuming))return!0;var o=r(l);if([o.overflow,o.overflowX,o.overflowY].join("").match(/(scroll|auto)/)){var s=l.scrollHeight-l.clientHeight;if(s>0&&!(0===l.scrollTop&&i>0||l.scrollTop===s&&i<0))return!0;var a=l.scrollLeft-l.clientWidth;if(a>0&&!(0===l.scrollLeft&&n<0||l.scrollLeft===a&&n>0))return!0}l=l.parentNode}return!1}(o.target,f,p))return;s(f,p),n=d;var b=(new Date).getTime(),g=b-i;g>0&&(l.x=f/g,l.y=p/g,i=b),function(n,i){var r=Math.floor(e.scrollTop),l=e.scrollLeft,o=Math.abs(n),s=Math.abs(i);if(s>o){if(i<0&&r===t.contentHeight-t.containerHeight||i>0&&0===r)return 0===window.scrollY&&i>0&&X.isChrome}else if(o>s&&(n<0&&l===t.contentWidth-t.containerWidth||n>0&&0===l))return!0;return!0}(f,p)&&o.preventDefault()}}function f(){t.settings.swipeEasing&&(clearInterval(o),o=setInterval(function(){t.isInitialized?clearInterval(o):l.x||l.y?Math.abs(l.x)<.01&&Math.abs(l.y)<.01?clearInterval(o):(s(30*l.x,30*l.y),l.x*=.8,l.y*=.8):clearInterval(o)},10))}}};return function(){function e(n){var i=this,s=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(t(this,e),"string"==typeof n&&(n=document.querySelector(n)),!n||!n.nodeName)throw new Error("no element is specified to initialize PerfectScrollbar");this.element=n,n.classList.add(u.main),this.settings=Object.assign({},H,s),this.containerWidth=null,this.containerHeight=null,this.contentWidth=null,this.contentHeight=null;var a,c,h=function(){return n.classList.add(u.state.focus)},d=function(){return n.classList.remove(u.state.focus)};this.isRtl="rtl"===r(n).direction,this.isNegativeScroll=(c=n.scrollLeft,n.scrollLeft=-1,a=n.scrollLeft<0,n.scrollLeft=c,a),this.negativeScrollAdjustment=this.isNegativeScroll?n.scrollWidth-n.clientWidth:0,this.event=new m,this.ownerDocument=n.ownerDocument||document,this.scrollbarXRail=o(u.element.rail("x")),n.appendChild(this.scrollbarXRail),this.scrollbarX=o(u.element.thumb("x")),this.scrollbarXRail.appendChild(this.scrollbarX),this.scrollbarX.setAttribute("tabindex",0),"string"==typeof this.settings.colorX&&this.scrollbarX.style.setProperty("background-color",this.settings.colorX),this.event.bind(this.scrollbarX,"focus",h),this.event.bind(this.scrollbarX,"blur",d),this.scrollbarXActive=null,this.scrollbarXWidth=null,this.scrollbarXLeft=null;var f=r(this.scrollbarXRail);this.scrollbarXBottom=parseInt(f.bottom,10),isNaN(this.scrollbarXBottom)?(this.isScrollbarXUsingBottom=!1,this.scrollbarXTop=y(f.top)):this.isScrollbarXUsingBottom=!0,this.railBorderXWidth=y(f.borderLeftWidth)+y(f.borderRightWidth),l(this.scrollbarXRail,{display:"block"}),this.railXMarginWidth=y(f.marginLeft)+y(f.marginRight),l(this.scrollbarXRail,{display:""}),this.railXWidth=null,this.railXRatio=null,this.scrollbarYRail=o(u.element.rail("y")),n.appendChild(this.scrollbarYRail),this.scrollbarY=o(u.element.thumb("y")),this.scrollbarYRail.appendChild(this.scrollbarY),this.scrollbarY.setAttribute("tabindex",0),"string"==typeof this.settings.colorY&&this.scrollbarY.style.setProperty("background-color",this.settings.colorY),this.event.bind(this.scrollbarY,"focus",h),this.event.bind(this.scrollbarY,"blur",d),this.scrollbarYActive=null,this.scrollbarYHeight=null,this.scrollbarYTop=null;var p=r(this.scrollbarYRail);this.scrollbarYRight=parseInt(p.right,10),isNaN(this.scrollbarYRight)?(this.isScrollbarYUsingRight=!1,this.scrollbarYLeft=y(p.left)):this.isScrollbarYUsingRight=!0,this.scrollbarYOuterWidth=this.isRtl?function(t){var e=r(t);return y(e.width)+y(e.paddingLeft)+y(e.paddingRight)+y(e.borderLeftWidth)+y(e.borderRightWidth)}(this.scrollbarY):null,this.railBorderYWidth=y(p.borderTopWidth)+y(p.borderBottomWidth),l(this.scrollbarYRail,{display:"block"}),this.railYMarginHeight=y(p.marginTop)+y(p.marginBottom),l(this.scrollbarYRail,{display:""}),this.railYHeight=null,this.railYRatio=null,this.reach={x:n.scrollLeft<=0?"start":n.scrollLeft>=this.contentWidth-this.containerWidth?"end":null,y:n.scrollTop<=0?"start":n.scrollTop>=this.contentHeight-this.containerHeight?"end":null},this.isAlive=!0,this.settings.handlers.forEach(function(t){return S[t](i)}),this.lastScrollTop=Math.floor(n.scrollTop),this.lastScrollLeft=n.scrollLeft,this.event.bind(this.element,"scroll",function(t){return i.onScroll(t)}),L(this)}return n(e,[{key:"update",value:function(){this.isAlive&&(this.negativeScrollAdjustment=this.isNegativeScroll?this.element.scrollWidth-this.element.clientWidth:0,l(this.scrollbarXRail,{display:"block"}),l(this.scrollbarYRail,{display:"block"}),this.railXMarginWidth=y(r(this.scrollbarXRail).marginLeft)+y(r(this.scrollbarXRail).marginRight),this.railYMarginHeight=y(r(this.scrollbarYRail).marginTop)+y(r(this.scrollbarYRail).marginBottom),l(this.scrollbarXRail,{display:"none"}),l(this.scrollbarYRail,{display:"none"}),L(this),Y(this,"top",0,!1,!0),Y(this,"left",0,!1,!0),l(this.scrollbarXRail,{display:""}),l(this.scrollbarYRail,{display:""}))}},{key:"onScroll",value:function(t){this.isAlive&&(L(this),Y(this,"top",this.element.scrollTop-this.lastScrollTop),Y(this,"left",this.element.scrollLeft-this.lastScrollLeft),this.lastScrollTop=Math.floor(this.element.scrollTop),this.lastScrollLeft=this.element.scrollLeft)}},{key:"destroy",value:function(){this.isAlive&&(this.event.unbindAll(),c(this.scrollbarX),c(this.scrollbarY),c(this.scrollbarXRail),c(this.scrollbarYRail),this.removePsClasses(),this.element=null,this.scrollbarX=null,this.scrollbarY=null,this.scrollbarXRail=null,this.scrollbarYRail=null,this.isAlive=!1)}},{key:"removePsClasses",value:function(){this.element.className=this.element.className.split(" ").filter(function(t){return!t.match(/^ps([-_].+|)$/)}).join(" ")}}]),e}()});