forked from niekjuh/touch-scroll
-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathtouch-scroll.min.js
More file actions
1 lines (1 loc) · 4.25 KB
/
touch-scroll.min.js
File metadata and controls
1 lines (1 loc) · 4.25 KB
1
(function(a){var b={y:0,x:0,scrollHeight:0,scrollWidth:0,vScroll:!0,hScroll:!1,elastic:!navigator.userAgent.match(/android/i),momentum:!0,elasticDamp:.6,elasticTime:50,reboundTime:400,momentumDamp:.9,momentumTime:300,iPadMomentumDamp:.95,iPadMomentumTime:1200,touchTags:["select","input","textarea"]},c={init:function(c){return this.each(function(){function C(a,b){return"translate"+(z?"3d(":"(")+a+"px,"+b+"px"+(z?",0)":")")}function D(a){a=a||"0",e.css("-webkit-transition-duration",a+"ms")}function E(){if(y){var a=window.getComputedStyle(e[0]).webkitTransform;if(!!a&&a!=="none"){var b=new WebKitCSSMatrix(a);return{x:b.e,y:b.f}}}return{x:g,y:f}}function F(){var a=g,b=f;g>0&&(a=0),f>0&&(b=0),g<q&&(a=q),f<p&&(b=p),I(a,b,d.reboundTime)}function G(){u&&(u=!1,F()),clearTimeout(w)}function H(a){if(!y||u)return;var b=m;m=E().x;var c=l;l=E().y;if(m>0||l>0)if(d.elastic)u=!0,g=m>0?0:m,f=l>0?0:l,J(m-b,l-c,d.elasticDamp,1,o,n,d.elasticTime);else{var e=m>0?0:m,h=l>0?0:l;D(0),B(e,h)}else if(m<q||l<p)if(d.elastic)u=!0,g=m<q?q:m,f=l<p?p:l,J(m-b,l-c,d.elasticDamp,1,o,n,d.elasticTime);else{var e=m<q?q:m,h=l<p?p:l;D(0),B(e,h)}else a&&(w=setTimeout(H,20,!0))}function I(a,b,c){if(a===g&&b===f)return;v=!0,D(c),B(a,b)}function J(a,b,c,d,e,h,i){var j=Math.abs(a),k=Math.abs(b),l=0,m=0;while(j>.1)j*=c,l+=j;while(k>.1)k*=c,m+=k;l>e&&(l=e),m>h&&(m=h),l>d&&(a<0&&(l=-l),l+=g,o>0&&(l>o*2?l=o*2:l<q-o*2&&(l=q-o*2))),m>d&&(b<0&&(m=-m),m+=f,n>0&&(m>n*2?m=n*2:m<p-n*2&&(m=p-n*2)));if(Math.abs(l)>d||Math.abs(m)>d)I(Math.round(l),Math.round(m),i),H(!0)}function K(a){if(a.originalEvent){if(a.originalEvent.touches&&a.originalEvent.touches.length)return a.originalEvent.touches;if(a.originalEvent.changedTouches&&a.originalEvent.changedTouches.length)return a.originalEvent.changedTouches}return a.touches}function L(a,b,c){var d=document.createEvent("MouseEvent");d.initMouseEvent(a,!0,!0,b.view,1,b.screenX,b.screenY,b.clientX,b.clientY,!1,!1,!1,!1,0,null),c.dispatchEvent(d)}function M(a){while(a.nodeType!==1)a=a.parentNode;return a}function N(b){if(a.inArray(b.target.tagName.toLowerCase(),d.touchTags)!==-1)return;b.preventDefault(),b.stopPropagation();var c=K(b)[0];L("mousedown",c,M(c.target)),t=!0,v=!1,k=0,j=0,clearTimeout(w),D(0);if(d.momentum){var e=E().x,l=E().y;if(e!==g||l!==f)B(e,l),v=!0}i=c.pageX-g,h=c.pageY-f}function O(a){if(!t)return;var b=K(a)[0].pageX-i,c=K(a)[0].pageY-h;b>0?d.elastic?b/=2:b=0:b<q&&(d.elastic?b=(b+q)/2:b=q),c>0?d.elastic?c/=2:c=0:c<p&&(d.elastic?c=(c+p)/2:c=p),d.hScroll?k=b-g:b=0,d.vScroll?j=c-f:c=0,v=!0,B(b,c)}function P(a){if(!t)return;t=!1;if(v)g>0||g<q||f>0||f<p?F():d.momentum&&J(k,j,x?d.iPadMomentumDamp:d.momentumDamp,40,2e3,2e3,x?d.iPadMomentumTime:d.momentumTime);else{var b=K(a)[0],c=M(b.target);L("mouseup",b,c),L("click",b,c)}}var d=a.extend(b,c);if(!!this._init)return this.update();this._init=!0;var e=a(this),f=-d.y,g=-d.x,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=!1,u=!1,v=!1,w,x=!!navigator.platform.match(/ipad/i),y="WebKitCSSMatrix"in window,z=y&&"m11"in new WebKitCSSMatrix,A=this.update=function(){d.hScroll&&(d.vScroll=!1,o=e.parent().width(),s=e.width(),s<o&&(s=o),q=o-s),d.vScroll&&(n=e.parent().height(),d.scrollHeight?r=d.scrollHeight:e.prop?r=e.prop("scrollHeight"):r=e.attr("scrollHeight"),p=n-r),clearTimeout(w),H(!1)};A(),e.css({"-webkit-transition-property":"-webkit-transform","-webkit-transition-timing-function":"cubic-bezier(0,0,0.2,1)","-webkit-transition-duration":"0","-webkit-transform":C(g,f)}),window.addEventListener("onorientationchange"in window?"orientationchange":"resize",A,!1),e.bind("touchstart.touchScroll",N),e.bind("touchmove.touchScroll",O),e.bind("touchend.touchScroll touchcancel.touchScroll",P),e.bind("webkitTransitionEnd.touchScroll",G);var B=this.setPosition=function(a,b){g=a,f=b,e.css("-webkit-transform",C(g,f))};this.getPosition=function(){return E()}})},update:function(){return this.each(function(){this.update()})},getPosition:function(){var a=[];return this.each(function(){var b=this.getPosition();a.push({x:-b.x,y:-b.y})}),a},setPosition:function(a,b){return this.each(function(){this.setPosition(-a,-b)})}};a.fn.touchScroll=function(b){if(c[b])return c[b].apply(this,Array.prototype.slice.call(arguments,1));if(typeof b=="object"||!b)return c.init.apply(this,arguments);a.error("Method "+b+" does not exist on jQuery.touchScroll")}})(jQuery);