/
jquery.overscroll.min.js
2 lines (2 loc) · 7.48 KB
/
jquery.overscroll.min.js
1
2
/* Overscroll v1.6.3 (C) 2012 - MIT+GPLv2 - http://azof.fr/KwOhTJ */
(function(a,b,c,d,e,f,g,h,i){"use strict";var j="overscroll",k=function(){var d=h.browser,f,g=c.userAgent,l=b.createElement(j).style,m=d.webkit?"webkit":d.mozilla?"moz":d.msie?"ms":d.opera?"o":"",n=m?["-","-"].join(m):"";return k={prefix:m,overflowScrolling:!1},h.each(m?[m,""]:[m],function(b,c){var d=c?c+"RequestAnimationFrame":"requestAnimationFrame",e=c?c+"OverflowScrolling":"overflowScrolling";a[d]!==i&&(k.animate=function(b){a[d].call(a,b)}),l[e]!==i&&g.indexOf("Chrome")<0&&(k.overflowScrolling=n+"overflow-scrolling")}),k.touchEvents="ontouchstart"in a,k.animate||(k.animate=function(a){e(a,1e3/60)}),m==="moz"||m==="webkit"?(k.cursorGrab=n+"grab",k.cursorGrabbing=n+"grabbing"):(f="https://mail.google.com/mail/images/2/",k.cursorGrab="url("+f+"openhand.cur), default",k.cursorGrabbing="url("+f+"closedhand.cur), default"),k}(),l={drag:"mousemove touchmove",end:"mouseup mouseleave click touchend touchcancel",hover:"mouseenter mouseleave",ignored:"select dragstart drag",scroll:"scroll",start:"mousedown touchstart",wheel:"mousewheel DOMMouseScroll"},m={captureThreshold:3,driftDecay:1.1,driftSequences:22,driftTimeout:100,scrollDelta:15,thumbOpacity:.7,thumbThickness:6,thumbTimeout:400,wheelDelta:20},n={cancelOn:"",direction:"multi",dragHold:!1,hoverThumbs:!1,scrollDelta:m.scrollDelta,showThumbs:!0,persistThumbs:!1,wheelDelta:m.wheelDelta,wheelDirection:"vertical",zIndex:999},o=function(a,b){b.trigger("overscroll:"+a)},p=function(){return(new Date).getTime()},q=function(a,b,c){return b.x=a.pageX,b.y=a.pageY,b.time=p(),b.index=c,b},r=function(a,b,c,d){var e,f;a&&a.added&&(a.horizontal&&(e=c*(1+b.container.width/b.container.scrollWidth),f=d+b.thumbs.horizontal.top,a.horizontal.css("margin",f+"px 0 0 "+e+"px")),a.vertical&&(e=c+b.thumbs.vertical.left,f=d*(1+b.container.height/b.container.scrollHeight),a.vertical.css("margin",f+"px 0 0 "+e+"px")))},s=function(a,b,c){a&&a.added&&!b.persistThumbs&&(c?(a.vertical&&a.vertical.stop(!0,!0).fadeTo("fast",m.thumbOpacity),a.horizontal&&a.horizontal.stop(!0,!0).fadeTo("fast",m.thumbOpacity)):(a.vertical&&a.vertical.fadeTo("fast",0),a.horizontal&&a.horizontal.fadeTo("fast",0)))},t=function(a){var b=a.data("events"),c=b&&b.click?b.click.slice():[];b&&delete b.click,a.one("mouseup touchend touchcancel",function(){return h.each(c,function(b,c){a.click(c)}),!1})},u=function(a){var b=a.data,c=b.thumbs,d=b.options,e=a.type==="mouseenter";s(c,d,e)},v=function(a){var b=a.data;b.flags.dragged||r(b.thumbs,b.sizing,this.scrollLeft,this.scrollTop)},w=function(a){a.preventDefault();var b=a.data,c=b.options,d=b.sizing,g=b.thumbs,h=b.wheel,i=b.flags,l,n=a.originalEvent;i.drifting=!1,n.wheelDelta&&(l=n.wheelDelta/(k.prefix==="o"?-120:120)),n.detail&&(l=-n.detail/3),l*=c.wheelDelta,h||(b.target.data(j).dragging=i.dragging=!0,b.wheel=h={timeout:null},s(g,c,!0)),c.wheelDirection==="horizontal"?this.scrollLeft-=l:this.scrollTop-=l,h.timeout&&f(h.timeout),r(g,d,this.scrollLeft,this.scrollTop),h.timeout=e(function(){b.target.data(j).dragging=i.dragging=!1,s(g,c,b.wheel=null)},m.thumbTimeout)},x=function(a){a.preventDefault();var b=a.data,c=a.originalEvent.touches,d=b.options,e=b.sizing,f=b.thumbs,g=b.position,h=b.flags,i=b.target.get(0);k.touchEvents&&c&&c.length&&(a=c[0]),h.dragged||s(f,d,!0),h.dragged=!0,d.direction!=="vertical"&&(i.scrollLeft-=a.pageX-g.x),b.options.direction!=="horizontal"&&(i.scrollTop-=a.pageY-g.y),q(a,b.position),--b.capture.index<=0&&(b.target.data(j).dragging=h.dragging=!0,q(a,b.capture,m.captureThreshold)),r(f,e,i.scrollLeft,i.scrollTop)},y=function(a,b,c){var d=b.data,e,f,g,h,i=d.capture,j=d.options,l=d.sizing,n=d.thumbs,q=p()-i.time,s=a.scrollLeft,t=a.scrollTop,u=m.driftDecay;if(q>m.driftTimeout)return c(d);e=j.scrollDelta*(b.pageX-i.x),f=j.scrollDelta*(b.pageY-i.y),j.direction!=="vertical"&&(s-=e),j.direction!=="horizontal"&&(t-=f),g=e/m.driftSequences,h=f/m.driftSequences,o("driftstart",d.target),d.drifting=!0,k.animate(function v(){if(d.drifting){var b=1,e=-1;d.drifting=!1;if(h>b&&a.scrollTop>t||h<e&&a.scrollTop<t)d.drifting=!0,a.scrollTop-=h,h/=u;if(g>b&&a.scrollLeft>s||g<e&&a.scrollLeft<s)d.drifting=!0,a.scrollLeft-=g,g/=u;r(n,l,a.scrollLeft,a.scrollTop),k.animate(v)}else o("driftend",d.target),c(d)})},z=function(a){var b=a.data,c=b.target,d=b.start=h(a.target),e=b.flags;e.drifting=!1,d.size()&&!d.is(b.options.cancelOn)&&(k.touchEvents||a.preventDefault(),c.css("cursor",k.cursorGrabbing),c.data(j).dragging=e.dragging=e.dragged=!1,b.options.dragHold?h(document).on(l.drag,b,x):c.on(l.drag,b,x),b.position=q(a,{}),b.capture=q(a,{},m.captureThreshold),o("dragstart",c))},A=function(a){var b=a.data,c=b.target,d=b.options,e=b.flags,f=b.thumbs,g=function(){f&&!d.hoverThumbs&&s(f,d,!1)};d.dragHold?h(document).unbind(l.drag,x):c.unbind(l.drag,x),b.position&&(o("dragend",c),e.dragging?y(c.get(0),a,g):g()),e.dragging&&b.start.is(a.target)&&t(b.start),c.data(j).dragging=b.start=b.capture=b.position=e.dragged=e.dragging=!1,c.css("cursor",k.cursorGrab)},B=function(a){return a=h.extend({},n,a),a.direction!=="multi"&&a.direction!==a.wheelDirection&&(a.wheelDirection=a.direction),a.scrollDelta=d.abs(a.scrollDelta),a.wheelDelta=d.abs(a.wheelDelta),a.scrollLeft=a.scrollLeft===i?null:d.abs(a.scrollLeft),a.scrollTop=a.scrollTop===i?null:d.abs(a.scrollTop),a},C=function(a){var b=h(a),c=b.width(),d=b.height(),e=c>=a.scrollWidth?c:a.scrollWidth,f=d>=a.scrollHeight?d:a.scrollHeight,g=e>c||f>d;return{valid:g,container:{width:c,height:d,scrollWidth:e,scrollHeight:f},thumbs:{horizontal:{width:c*c/e,height:m.thumbThickness,corner:m.thumbThickness/2,left:0,top:d-m.thumbThickness},vertical:{width:m.thumbThickness,height:d*d/f,corner:m.thumbThickness/2,left:c-m.thumbThickness,top:0}}}},D=function(a,b){var c=h(a),d,e=c.data(j)||{},f=c.attr("style"),g=b?function(){e=c.data(j),d=e.thumbs,f?c.attr("style",f):c.removeAttr("style"),d&&(d.horizontal&&d.horizontal.remove(),d.vertical&&d.vertical.remove()),c.removeData(j).off(l.wheel,w).off(l.start,z).off(l.end,A).off(l.ignored,!1)}:h.noop;return h.isFunction(e.remover)?e.remover:g},E=function(a,b){return{position:"absolute",opacity:b.persistThumbs?m.thumbOpacity:0,"background-color":"black",width:a.width+"px",height:a.height+"px","border-radius":a.corner+"px",margin:a.top+"px 0 0 "+a.left+"px","z-index":b.zIndex}},F=function(a,b,c){var d="<div/>",e={},f=!1;return b.container.scrollWidth>0&&c.direction!=="vertical"&&(f=E(b.thumbs.horizontal,c),e.horizontal=h(d).css(f).prependTo(a)),b.container.scrollHeight>0&&c.direction!=="horizontal"&&(f=E(b.thumbs.vertical,c),e.vertical=h(d).css(f).prependTo(a)),e.added=!!f,e},G=function(a,b){b=B(b);var c=C(a),d,e={options:b,sizing:c,flags:{dragging:!1},remover:D(a,!0)};c.valid&&(e.target=a=h(a).css({position:"relative",overflow:"hidden",cursor:k.cursorGrab}).on(l.wheel,e,w).on(l.start,e,z).on(l.end,e,A).on(l.scroll,e,v).on(l.ignored,!1),b.dragHold?h(document).on(l.end,e,A):e.target.on(l.end,e,A),b.scrollLeft!==null&&a.scrollLeft(b.scrollLeft),b.scrollTop!==null&&a.scrollTop(b.scrollTop),b.showThumbs&&(e.thumbs=d=F(a,c,b),d.added&&(r(d,c,a.scrollLeft(),a.scrollTop()),b.hoverThumbs&&a.on(l.hover,e,u))),a.data(j,e))},H=function(a){D(a)()},I=function(a){return this.removeOverscroll().each(function(){G(this,a)})},J=function(){return this.removeOverscroll().each(function(){h(this).data(j,{remover:D(this)}).css(k.overflowScrolling,"touch").css("overflow","auto")})},K=function(){return this.each(function(){H(this)})};I.settings=m,h.extend(g,{overscroll:k.overflowScrolling?J:I,removeOverscroll:K})})(window,document,navigator,Math,setTimeout,clearTimeout,jQuery.fn,jQuery);