forked from joehewitt/scrollability
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscrollability-min.js
More file actions
1 lines (1 loc) · 7 KB
/
scrollability-min.js
File metadata and controls
1 lines (1 loc) · 7 KB
1
/* See LICENSE for terms of usage */(function(){function R(b){var c=b.parentNode;return{node:b,scrollbar:O(b),min:-c.scrollHeight+c.offsetHeight,max:0,viewport:c.offsetHeight,bounce:c.offsetHeight*e,constrained:!0,delegate:b.scrollDelegate,filter:function(a,b){return b},disable:function(b,c,d,e){var f=Math.abs(b-d),g=Math.abs(c-e);if(f>g&&f>a)return!0},update:function(a,b){N(a,a.scrollable_horizontal||0,b)}}}function Q(b){var c=b.parentNode;return{node:b,min:-c.scrollWidth+c.offsetWidth,max:0,viewport:c.offsetWidth,bounce:c.offsetWidth*e,constrained:!0,delegate:b.scrollDelegate,filter:function(a,b){return a},disable:function(b,c,d,e){var f=Math.abs(b-d),g=Math.abs(c-e);if(g>f&&g>a)return!0},update:function(a,b){N(a,b,a.scrollable_vertical||0)}}}function P(a,b,c,d){return a==d?b+c:c*(-Math.pow(2,-10*a/d)+1)+b}function O(a){if(!a.scrollableScrollbar){var b=a.scrollableScrollbar=document.createElement("div");b.className="scrollableScrollbar",b.style.cssText=["position: absolute","top: 0","right: 1px","width: 7px","min-height: 7px","opacity: 0","-webkit-transform: translate3d(0,0,0)","-webkit-box-sizing: border-box",'-webkit-border-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAUhJREFUeNp0Ur1OwzAQtt1CaZQQgUjDhuicrEwoqjJlzpBAXoIHywtkcwfECyQPwIgKQkoyFJWq5k6cJcsUS5/sO993/1wpxazjAU4BJyR/A3aA0TSaGu85kbSO0y0AM/pH8lYr8ZwBLpBUluVtGIaPjuM8IYIgeEAdObwkB4xTqgv8iOP4vuu6lZEFRkUDHkWRbNv2mVJ/x4g+1pPn+RJICRlzk4Q3/lVVdUP1nwtqgpJSYqQJGbMj96RpmhXJM01kwzBcWU2x36zv+wXppro5TAihvat/HCjxa6R0V7FY5rruhx3BTtfzvDeS95rI0zSVcB+MpijL0SHLsjW9d3ocIRZvjINbKSsYx5rGsQdsNHFOC8CKolhCh+/GcbxG2ff9TZIkL3Vdv5KjT8AXN3b12MqZi4yRBiTZu7olmEvOacH/LPmPAAMA2bZzzeYUC40AAAAASUVORK5CYII=") 6 2 6 2 / 3px 1px 3px 1px round round',"z-index: 2147483647"].join(";")}return a.scrollableScrollbar}function N(a,b,c){m?a.style.webkitTransform="translate3d("+(b?b+"px":"0")+","+(c?c+"px":"0")+","+"0)":n&&(a.style.MozTransform="translate("+(b?b+"px":"0")+","+(c?c+"px":"0")+")")}function M(){if(w){clearInterval(w),w=0;for(var a=0;a<x.length;++a){var b=x[a];b.terminator()}x=[]}}function L(a){for(var b=0;b<a.length;++b){var c=a[b];c.className=c.className.replace("touched","")}}function K(a){var b=[];for(var c=a;c;c=c.parentNode)c.nodeType==1&&(c.className=(c.className?c.className+" ":"")+"touched",b.push(c));return b}function J(a,b,c,d){var e=a.className.split(" ");for(var f=0;f<e.length;++f){var g=e[f];if(y[g]){var h=y[g](a);h.key="scrollable_"+g,h.paginated=e.indexOf("paginated")!=-1,h.key in a||(a[h.key]=h.initial?h.initial(a):0);return h}}}function I(a,b,c,d,e){while(a){if(a.nodeType==1){var f=J(a,c,d,e);if(f){var g=!1;for(var h=0;h<b.length;++h)if(b[h].node==a){g=!0;break}g||(f=F(f,c,d,e),f&&b.push(f))}}a=a.parentNode}}function H(a,b,c,d){var e=[];I(a,e,b,c,d);var f=document.querySelectorAll(".scrollable.global");for(var g=0;g<f.length;++g)I(f[g],e,b,c,d);return e}function G(){var a=(new Date).getTime();for(var b=0;b<x.length;++b){var c=x[b],d=c.filter(r,s);c.animator(d,a)||(c.terminator(),x.splice(b--,1))}x.length||M()}function F(e,l,m,n){function W(){if(q){var a=Math.round(v/r);V(a*(r+A))}else v>x&&p?V(x):v<w&&p&&V(w);s&&(s.style.opacity="0",s.style.webkitTransition="opacity 0.33s linear"),o&&o.onEndScroll&&o.onEndScroll()}function V(a,b){v=a,e.node[e.key]=v,e.update(e.node,v),o&&o.onScroll&&o.onScroll(v);var c=-w-x;if(s&&r<c){var d=r-k*2,f=d/c*d,g=0;v>x?(f=Math.max(f-(v-x),7),g=0):v<w?(f=Math.max(f-(w-v),7),g=d-f):g=Math.round(Math.abs(v)/c*(d-f)),g+=k,s.style.height=Math.round(f)+"px",N(s,0,Math.round(g)),u&&(s.style.webkitTransition="none",s.style.opacity="1")}return b}function U(g,h){var i=1/(h-J);J=h;var k=!0;if(t){var l=(g-I)*b;if(!l){K||(K=h);if(h-K<L)return!0}else K=0;!O&&Math.abs(g-startTouch)>a&&(O=!0,o&&o.onLockScroll&&o.onLockScroll(e.key)),I=g,B=l/i;if(v>x&&z==x&&p){var m=v-x;B*=1-m/G}else if(v<w&&y==w&&p){var m=w-v;B*=1-m/G}}else{if(q&&!M){M=!0;if(Math.abs(v-x)>H||Math.abs(B)>j)if(v>x){if(x!=z){x+=r+A,w+=r+A;if(o&&o.onScrollPage){var n=w%r,s=-Math.round((v+r-n)/r);o.onScrollPage(s,-1)}}}else if(w!=y){x-=r+A,w-=r+A;if(o&&o.onScrollPage){var n=w%r,s=-Math.round((v-r-n)/r);o.onScrollPage(s,1)}}}if(v>x&&p){if(!(B>0)){C||(D=v,E=x-v),v=P(C,D,E,F);return V(v,++C<=F&&Math.floor(v)>x)}var m=v-x,u=1-m/G;B=Math.max(B-f*i,0)*u,C=0}else if(v<w&&p){if(!(B<0)){C||(D=v,E=w-v),v=P(C,D,E,F);return V(v,++C<=F&&Math.ceil(v)<w)}var m=w-v,u=1-m/G;B=Math.min(B+f*i,0)*u,C=0}else{C||(B<0&&B<-c?B=-c:B>0&&B>c&&(B=c),D=B),B=P(C,D,-D,d);if(++C>d||Math.floor(B)==0)k=!1}}v+=B*i;return V(v,k)}var o=e.delegate,p=e.constrained,q=e.paginated,r=e.viewport||0,s=e.scrollbar,v=e.node[e.key],w=e.min,x=e.max,y=w,z=Math.round(x/r)*r,A=0,B=0,C=0,D,E,F=q?h:g,G=e.bounce,H=r*i,I=startTouch=e.filter(l,m),J=n,K=0,L=20,M=!1,O=!1;if(q){var Q=Math.round(Math.abs(y)%r),R=(Math.abs(y)-Q)/r+1,A=Q/R,S=Math.round(v)%r,T=Math.round((v-S)/r)*r;w=x=Math.round(T+z)+S,y+=A}if(o&&o.onStartScroll&&!o.onStartScroll())return null;s&&e.node.parentNode.appendChild(s),e.updater=V,e.animator=U,e.terminator=W;return e}function E(a){function i(a){f&&(clearTimeout(f),f=0);if(d){var b=document.createEvent("MouseEvents");b.initMouseEvent("click",!0,!0,window,1),d[0].dispatchEvent(b),L(d)}g.removeEventListener("touchmove",h,!1),g.removeEventListener("touchend",i,!1),t=!1}function h(a){a.preventDefault(),u=!0,f&&(clearTimeout(f),f=0),d&&(L(d),d=null);var b=a.touches[0];r=b.clientX,s=b.clientY;if(x.length>1)for(var c=0;c<x.length;++c){var e=x[c];if(e.disable&&e.disable(r,s,p,q)){e.terminator(),x.splice(c,1);break}}}M();var b=a.target,c=a.touches[0],d=null,e=(new Date).getTime();r=p=c.clientX,s=q=c.clientY,t=!0,u=!1,x=H(a.target,r,s,e);if(!x.length&&!z.globalScrolling)return!0;var f=setTimeout(function(){f=0,d=K(b)},50),g=document;g.addEventListener("touchmove",h,!1),g.addEventListener("touchend",i,!1),w=setInterval(G,0)}function D(a){v=!0}function C(a){setTimeout(function(){v?v=!1:o&&z.scrollToTop()})}function B(){z.flashIndicators()}function A(){window.scrollability=z,document.addEventListener("touchstart",E,!1),document.addEventListener("scroll",C,!1),document.addEventListener("orientationchange",D,!1),window.addEventListener("load",B,!1)}var a=10,b=1,c=720/(window.devicePixelRatio||1),d=350,e=.5,f=600,g=80,h=60,i=.5,j=50,k=1,l=200,m="webkitTransform"in document.documentElement.style,n="MozTransform"in document.documentElement.style,o="ontouchstart"in window,p,q,r,s,t,u,v,w=0,x=[],y={horizontal:Q,vertical:R},z={globalScrolling:!1,scrollers:y,flashIndicators:function(){var a=document.querySelectorAll(".scrollable.vertical");for(var b=0;b<a.length;++b)z.scrollTo(a[b],0,0,20,!0)},scrollToTop:function(){var a=document.getElementsByClassName("scrollable");if(a.length){var b=a[0];b.className.indexOf("vertical")!=-1&&z.scrollTo(b,0,0,l)}},scrollTo:function(a,b,c,d,e){M();var f=J(a);if(f){e&&(f.delegate=null),f=F(f),x=[f],u=!0;if(d){var g=a[f.key],h=f.filter(b,c),i=h-g,j=(new Date).getTime();w=setInterval(function(){var a=(new Date).getTime()-j,b=g+(h-g)*(a/d);if(i<0&&b<h||i>0&&b>h)b=h;f.updater(b),b==h&&(clearInterval(w),setTimeout(M,200))},20)}else f.updater(c),M()}}};A()})()