forked from ajoslin/angular-scrolly
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathangular-scrolly.min.js
More file actions
6 lines (6 loc) · 7.39 KB
/
angular-scrolly.min.js
File metadata and controls
6 lines (6 loc) · 7.39 KB
1
2
3
4
5
6
/*
* angular-scrolly - v0.0.2 - 2013-07-30
* http://github.com/ajoslin/angular-scrolly
* Created by Andy Joslin; Licensed under Public Domain
*/
angular.module("ajoslin.scrolly",["ajoslin.scrolly.dragger","ajoslin.scrolly.transformer","ajoslin.scrolly.scroller","ajoslin.scrolly.directives"]),angular.module("ajoslin.scrolly.directives",["ajoslin.scrolly.scroller"]).directive("scrollyScroll",["$scroller","$document",function(a){return angular.element(document.body).bind("touchmove",function(a){a.preventDefault()}),{restrict:"A",link:function(b,c){new a(c)}}}]),angular.module("ajoslin.scrolly.desktop",[]).factory("$desktopScroller",["$document",function(a){function b(a,b,c){return Math.min(Math.max(a,b),c)}return function(c,d){function e(a){var c=a.wheelDeltaY/2;d.calculateHeight();var e=d.transformer.pos+c;d.transformer.setTo(b(-d.scrollHeight,e,0)),a.preventDefault()}function f(a){var c=g[a.keyCode||a.which];if(c){if(a.preventDefault(),d.transformer.changing)return;d.calculateHeight();var e=d.transformer.pos+c;if(e=b(-d.scrollHeight,e,0),e!==d.transformer.pos){var f=e-d.transformer.pos,h=Math.abs(c/1.5)*(f/c);d.transformer.easeTo(e,h)}}}c.bind("$destroy",function(){a.unbind("mousewheel",e),a.unbind("keydown",f)}),a.bind("mousewheel",e),a.bind("keydown",f);var g={38:150,40:-150,32:-600}}}]),angular.module("ajoslin.scrolly.dragger",[]).provider("$dragger",function(){function a(a,b){for(;a.parentNode;){if(a.getAttribute&&a.getAttribute(b))return a;a=a.parentNode}return null}var b=!0;this.shouldBlurOnDrag=function(a){return arguments.length&&(b=!!a),b};var c=6;this.minDistanceForDrag=function(a){return arguments.length&&(c=a),c};var d=300;this.maxTimeMotionless=function(a){return arguments.length&&(d=a),d},this.$get=["$window","$document",function(){function e(e){function f(a,b){angular.forEach(n,function(c){c(a,b)})}function g(a){m.startPos=m.pos=a,m.startTime=Date.now(),m.dragging=!0}function h(a){return a&&"INPUT"===a.tagName||"SELECT"===a.tagName||"TEXTAREA"===a.tagName}function i(c){c=c.originalEvent||c;var d=c.target||c.srcElement,e=c.touches?c.touches[0]:c;a(d,"data-dragger-ignore")||(b&&h(d)&&document.activeElement&&document.activeElement.blur(),m.moved=!1,m.inactiveDrag=!1,m.delta=0,m.pos=0,m.distance=0,g(e.pageY),f({type:"start",startPos:m.startPos,startTime:m.startTime}))}function j(a){if(a=a.originalEvent||a,a.preventDefault(),m.dragging){var b=a.touches?a.touches[0]:a,e=b.pageY-m.pos;if(m.delta=e,m.pos=b.pageY,m.distance=m.pos-m.startPos,Math.abs(m.pos-m.startPos)<c)return;m.moved=!0;var h=m.lastMoveTime-m.startTime;h>d&&g(m.pos),m.lastMoveTime=a.timeStamp||Date.now(),f({type:"move",startPos:m.startPos,startTime:m.startTime,pos:m.pos,delta:m.delta,distance:m.distance})}}function k(a){if(a=a.originalEvent||a,m.dragging){m.dragging=!1;var b=Date.now(),c=b-m.startTime,e=b-m.lastMoveTime>d;f({type:"end",startPos:m.startPos,startTime:m.startTime,pos:m.pos,delta:m.delta,distance:m.distance,duration:c,inactiveDrag:e})}}var l={};e[0];var m={startPos:0,startTime:0,pos:0,delta:0,distance:0,lastMoveTime:0,inactiveDrag:!1,dragging:!1},n=[];return e.bind("touchstart",i),e.bind("touchmove",j),e.bind("touchend touchcancel",k),l.addListener=function(a){if(!angular.isFunction(a))throw new Error("Expected callback to be a function, instead got '"+typeof a+'".');n.push(a)},l.removeListener=function(a){if(!angular.isFunction(a))throw new Error("Expected callback to be a function, instead got '"+typeof a+'".');var b=n.indexOf(a);b>-1&&n.splice(b,1)},l}return e}]}),angular.module("ajoslin.scrolly.scroller",["ajoslin.scrolly.dragger","ajoslin.scrolly.transformer","ajoslin.scrolly.desktop"]).provider("$scroller",function(){function a(a){return 0|a}var b=.001;this.decelerationRate=function(a){return arguments.length&&(b=a),b};var c=!0;this.supportDesktop=function(a){return c=!!a};var d=.5;this.pastBoundaryScrollRate=function(a){return arguments.length&&(d=a),d};var e=40;this.bounceBuffer=function(a){return arguments.length&&(e=a),e};var f=200,g=1.5;this.bounceBackMinTime=function(a){return arguments.length&&(f=a),f},this.bounceBackDistanceMulti=function(a){return arguments.length&&(g=a),g},this.$get=["$dragger","$transformer","$window","$document","$desktopScroller",function(d,h,i,j,k){function l(a){return Math.abs(a)*g+f}function m(f){function g(b){switch(b.type){case"start":o.changing&&o.stop(),j.calculateHeight();break;case"move":var c=o.pos+b.delta;j.outOfBounds(c)&&(c=o.pos+a(.5*b.delta)),o.setTo(c);break;case"end":if(j.outOfBounds(o.pos)||b.inactiveDrag)j.checkBoundaries();else{var d=j.momentum(b);d.position!==o.pos&&o.easeTo(d.position,d.time,j.checkBoundaries)}}}var j={},n=f[0],o=j.transformer=new h(f),p=j.dragger=new d(f);return c&&new k(f,j),j.calculateHeight=function(){var a=m.getContentRect(n),b=i.innerHeight;return j.scrollHeight=a.height<b?0:a.height-b+a.top+a.bottom,j.scrollHeight},j.calculateHeight(),j.outOfBounds=function(a){return a>0?a:a<-j.scrollHeight?a+j.scrollHeight:!1},j.checkBoundaries=function(){j.calculateHeight();var a=j.outOfBounds(o.pos);if(a){var b=a>0?0:-j.scrollHeight;o.easeTo(b,l(a))}},j.momentum=function(c){j.calculateHeight();var d,f=Math.abs(c.distance)/c.duration,g=o.pos+f*f/(2*b)*(c.distance<0?-1:1),h=f/b,i=j.outOfBounds(g);return i&&(i>0?g=Math.min(i,e):0>i&&(g=Math.max(g,-(j.scrollHeight+e))),d=Math.abs(g-o.pos),h=d/f),{position:g,time:a(h)}},p.addListener(g),f.bind("$destroy",function(){p.removeListener(g)}),j}return m.getContentRect=function(a){var b=window.getComputedStyle(a),c=parseInt(b.getPropertyValue("margin-top"),10)+parseInt(b.getPropertyValue("padding-top"),10),d=parseInt(b.getPropertyValue("margin-bottom"),10)+parseInt(b.getPropertyValue("padding-bottom"),10),e=parseInt(b.getPropertyValue("top"),10),f=parseInt(b.getPropertyValue("bottom"),10),g=parseInt(b.getPropertyValue("height"),10);return{top:c+(isNaN(e)?0:e),bottom:d+(isNaN(f)?0:f),height:g}},m}]}),angular.module("ajoslin.scrolly.transformer",[]).factory("$nextFrame",["$window",function(a){return a.requestAnimationFrame||a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||function(b){return a.setTimeout(b,17)}}]).provider("$transformer",function(){var a="cubic-bezier(0.25, 0.46, 0.45, 0.94)";this.timingFunction=function(b){return arguments.length&&(a=b),a},this.$get=["$window","$nextFrame","$sniffer","$document",function(b,c,d,e){function f(b){return l+" "+b+"ms "+a}function g(a){return"translate3d("+a+"px,0,0)"}function h(a){return"translate3d(0,"+a+"px,0)"}function i(a,d){var e,i,j={},l=a[0];d=d||{},d.translateX?(e=g,i=4):(e=h,i=5),j.$$calcPosition=function(){var a=b.getComputedStyle(l),c=(a[k]||"").replace(/[^0-9-.,]/g,"").split(",");return c.length>1?parseInt(c[i],10):0},j.pos=j.$$calcPosition();var n;return j.stop=function(a){n&&(b.clearTimeout(n),n=null),l.style[m]="none",j.pos=j.$$calcPosition(),j.changing=!1,c(function(){j.setTo(j.pos),a&&a()})},j.easeTo=function(a,d,e){function g(){l.style[m]=f(d),j.changing=!0,c(function(){j.setTo(a),n=b.setTimeout(function(){j.stop(),e&&e()},d)})}if(!angular.isNumber(d)||0>d)throw new Error("Expected a positive number for time, got '"+d+"'.");j.changing?j.stop(g):g()},j.setTo=function(a){j.pos=a,l.style[k]=e(a)},j}d.vendorPrefix||angular.isString(e[0].body.style.webkitTransition)&&(d.vendorPrefix="webkit");var j=d.vendorPrefix;j&&"Moz"!==j&&"O"!==j&&(j=j.substring(0,1).toLowerCase()+j.substring(1));var k=j?j+"Transform":"transform",l=j?"-"+j.toLowerCase()+"-transform":"transform",m=j?j+"Transition":"transition";return i.transformProp=k,i.transformPropDash=l,i.transitionProp=m,i}]});