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.01 KB
/
scrollability-min.js
File metadata and controls
1 lines (1 loc) · 7.01 KB
1
/* See LICENSE for terms of usage */(function(){function O(b){var c=b.parentNode;return{node:b,scrollbar:L(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){K(a,a.scrollable_horizontal||0,b)}}}function N(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){K(a,b,a.scrollable_vertical||0)}}}function M(a,b,c,d){return a==d?b+c:c*(-Math.pow(2,-10*a/d)+1)+b}function L(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 K(a,b,c){l?a.style.webkitTransform="translate3d("+(b?b+"px":"0")+","+(c?c+"px":"0")+","+"0)":m&&(a.style.MozTransform="translate("+(b?b+"px":"0")+","+(c?c+"px":"0")+")")}function J(){if(v){clearInterval(v),v=0;for(var a=0;a<w.length;++a){var b=w[a];b.terminator()}w=[]}}function I(a){for(var b=0;b<a.length;++b){var c=a[b];c.className=c.className.replace("touched","")}}function H(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 G(a,b,c,d){var e=a.className.split(" ");for(var f=0;f<e.length;++f){var g=e[f];if(x[g]){var h=x[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 F(a,b,c,d,e){while(a){if(a.nodeType==1){var f=G(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=C(f,c,d,e),f&&b.push(f))}}a=a.parentNode}}function E(a,b,c,d){var e=[];F(a,e,b,c,d);var f=document.querySelectorAll(".scrollable.global");for(var g=0;g<f.length;++g)F(f[g],e,b,c,d);return e}function D(){var a=(new Date).getTime();for(var b=0;b<w.length;++b){var c=w[b],d=c.filter(q,r);c.animator(d,a)||(c.terminator(),w.splice(b--,1))}w.length||J()}function C(e,k,l,m){function U(){if(p){var a=Math.round(u/q);T(a*(q+z))}else u>w&&o?T(w):u<v&&o&&T(v);r&&(r.style.opacity="0",r.style.webkitTransition="opacity 0.33s linear"),n&&n.onEndScroll&&n.onEndScroll()}function T(a,b){u=a,e.node[e.key]=u,e.update(e.node,u),n&&n.onScroll&&n.onScroll(u);var c=-v-w;if(r&&q<c){var d=q-j*2,f=d/c*d,g=0;u>w?(f=Math.max(f-(u-w),7),g=0):u<v?(f=Math.max(f-(v-u),7),g=d-f):g=Math.round(Math.abs(u)/c*(d-f)),g+=j,r.style.height=Math.round(f)+"px",K(r,0,Math.round(g)),t&&(r.style.webkitTransition="none",r.style.opacity="1")}return b}function S(h,j){var k=1/(j-H);H=j;var l=!0;if(s){var m=(h-G)*b;if(!m){I||(I=j);if(j-I<J)return!0}else I=0;!N&&Math.abs(h-startTouch)>a&&(N=!0,n&&n.onLockScroll&&n.onLockScroll(e.key)),G=h,A=m/k;if(u>w&&o){var r=u-w;A*=1-r/E}else if(u<v&&o){var r=v-u;A*=1-r/E}}else{if(p&&!L){L=!0;if(Math.abs(u-w)>F||Math.abs(A)>i)if(u>w){if(w!=y){w+=q+z,v+=q+z;if(n&&n.onScrollPage){var t=v%q,K=-Math.round((u+q-t)/q);n.onScrollPage(K,-1)}}}else if(v!=x){w-=q+z,v-=q+z;if(n&&n.onScrollPage){var t=v%q,K=-Math.round((u-q-t)/q);n.onScrollPage(K,1)}}}if(u>w&&o){if(!(A>0)){B||(C=u,D=w-u),u=M(B,C,D,g);return T(u,++B<=g&&Math.floor(u)>w)}var r=u-w,O=1-r/E;A=Math.max(A-f*k,0)*O,B=0}else if(u<v&&o){if(!(A<0)){B||(C=u,D=v-u),u=M(B,C,D,g);return T(u,++B<=g&&Math.ceil(u)<v)}var r=v-u,O=1-r/E;A=Math.min(A+f*k,0)*O,B=0}else{B||(A<0&&A<-c?A=-c:A>0&&A>c&&(A=c),C=A),A=M(B,C,-C,d);if(++B>d||Math.floor(A)==0)l=!1}}u+=A*k;return T(u,l)}var n=e.delegate,o=e.constrained,p=e.paginated,q=e.viewport||0,r=e.scrollbar,u=e.node[e.key],v=e.min,w=e.max,x=v,y=Math.round(w/q)*q,z=0,A=0,B=0,C,D,E=e.bounce,F=q*h,G=startTouch=e.filter(k,l),H=m,I=0,J=20,L=!1,N=!1;if(p){var O=Math.round(Math.abs(x)%q),P=(Math.abs(x)-O)/q+1,z=O/P,Q=Math.round(u)%q,R=Math.round((u-Q)/q)*q;v=w=Math.round(R+y)+Q,x+=z}if(n&&n.onStartScroll&&!n.onStartScroll())return null;r&&e.node.parentNode.appendChild(r),e.updater=T,e.animator=S,e.terminator=U;return e}function B(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),I(d)}g.removeEventListener("touchmove",h,!1),g.removeEventListener("touchend",i,!1),s=!1}function h(a){a.preventDefault(),t=!0,f&&(clearTimeout(f),f=0),d&&(I(d),d=null);var b=a.touches[0];q=b.clientX,r=b.clientY;if(w.length>1)for(var c=0;c<w.length;++c){var e=w[c];if(e.disable&&e.disable(q,r,o,p)){e.terminator(),w.splice(c,1);break}}}J();var b=a.target,c=a.touches[0],d=null,e=(new Date).getTime();q=o=c.clientX,r=p=c.clientY,s=!0,t=!1,w=E(a.target,q,r,e);if(!w.length&&!scrollability.globalScrolling)return!0;var f=setTimeout(function(){f=0,d=H(b)},50),g=document;g.addEventListener("touchmove",h,!1),g.addEventListener("touchend",i,!1),v=setInterval(D,0)}function A(a){u=!0}function z(a){setTimeout(function(){u?u=!1:n&&scrollability.scrollToTop()})}function y(){scrollability.flashIndicators()}var a=10,b=1,c=720/(window.devicePixelRatio||1),d=350,e=.5,f=600,g=90,h=.3,i=50,j=1,k=200,l="webkitTransform"in document.documentElement.style,m="MozTransform"in document.documentElement.style,n="ontouchstart"in window,o,p,q,r,s,t,u,v=0,w=[],x={horizontal:N,vertical:O};window.scrollability={globalScrolling:!1,scrollers:x,flashIndicators:function(){var a=document.querySelectorAll(".scrollable.vertical");for(var b=0;b<a.length;++b)scrollability.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&&scrollability.scrollTo(b,0,0,k)}},scrollTo:function(a,b,c,d,e){J();var f=G(a);if(f){e&&(f.delegate=null),f=C(f),w=[f],t=!0;if(d){var g=a[f.key],h=f.filter(b,c),i=h-g,j=(new Date).getTime();v=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(v),setTimeout(J,200))},20)}else f.updater(c),J()}}},document.addEventListener("touchstart",B,!1),document.addEventListener("scroll",z,!1),document.addEventListener("orientationchange",A,!1),window.addEventListener("load",y,!1)})()