From 2991490fe867600a9280f53b6eecd63876327dd2 Mon Sep 17 00:00:00 2001 From: Joel Arvidsson Date: Wed, 9 Jul 2014 11:42:35 +0200 Subject: [PATCH] Released v0.6.0. --- angular-scroll.js | 18 ++++++++++++++---- angular-scroll.min.js | 2 +- angular-scroll.min.js.map | 2 +- bower.json | 2 +- package.json | 2 +- 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/angular-scroll.js b/angular-scroll.js index a75f00d..819bb92 100644 --- a/angular-scroll.js +++ b/angular-scroll.js @@ -58,11 +58,19 @@ angular.module('duScroll.scrollHelpers', []).run([ } var startLeft = this.scrollLeft(), startTop = this.scrollTop(), deltaLeft = Math.round(left - startLeft), deltaTop = Math.round(top - startTop); var startTime = null; + var el = this; + var cancelOnEvents = 'scroll mousedown mousewheel touchmove keydown'; + var cancelScrollAnimation = function ($event) { + if (!$event || $event.which > 0) { + el.unbind(cancelOnEvents, cancelScrollAnimation); + cancelAnimation(scrollAnimation); + deferred.reject(); + scrollAnimation = null; + } + }; if (scrollAnimation) { - cancelAnimation(scrollAnimation); - deferred.reject(); + cancelScrollAnimation(); } - var el = this; deferred = $q.defer(); if (!deltaLeft && !deltaTop) { deferred.resolve(); @@ -78,12 +86,14 @@ angular.module('duScroll.scrollHelpers', []).run([ if (percent < 1) { scrollAnimation = requestAnimation(animationStep); } else { + el.unbind(cancelOnEvents, cancelScrollAnimation); scrollAnimation = null; deferred.resolve(); } }; //Fix random mobile safari bug when scrolling to top by hitting status bar el.scrollTo(startLeft, startTop); + el.bind(cancelOnEvents, cancelScrollAnimation); scrollAnimation = requestAnimation(animationStep); return deferred.promise; }; @@ -117,7 +127,7 @@ angular.module('duScroll.scrollHelpers', []).run([ return el.scrollTop; } }; - //Add duration and easing functionality to existing jQuery getter/setters + //Add duration and easing functionality to existing jQuery getter/setters var overloadScrollPos = function (superFn, overloadFn) { return function (value, duration, easing) { if (duration) { diff --git a/angular-scroll.min.js b/angular-scroll.min.js index 2e540c1..c1ea9d3 100644 --- a/angular-scroll.min.js +++ b/angular-scroll.min.js @@ -1,2 +1,2 @@ -var duScrollDefaultEasing=function(e){return.5>e?Math.pow(2*e,2)/2:1-Math.pow(2*(1-e),2)/2};angular.module("duScroll",["duScroll.scrollspy","duScroll.requestAnimation","duScroll.smoothScroll","duScroll.scrollContainer","duScroll.scrollHelpers"]).value("duScrollDuration",350).value("duScrollGreedy",!1).value("duScrollEasing",duScrollDefaultEasing),angular.module("duScroll.scrollHelpers",[]).run(["$window","$q","cancelAnimation","requestAnimation","duScrollEasing",function(e,t,n,r,o){var l=angular.element.prototype;this.$get=function(){return l};var i=function(e){return"undefined"!=typeof HTMLDocument&&e instanceof HTMLDocument||e.nodeType&&e.nodeType===e.DOCUMENT_NODE},c=function(e){return"undefined"!=typeof HTMLElement&&e instanceof HTMLElement||e.nodeType&&e.nodeType===e.ELEMENT_NODE},u=function(e){return c(e)||i(e)?e:e[0]};l.scrollTo=function(t,n,r){var o;if(angular.isElement(t)?o=this.scrollToElement:r&&(o=this.scrollToAnimated),o)return o.apply(this,arguments);var l=u(this);return i(l)?e.scrollTo(t,n):(l.scrollLeft=t,void(l.scrollTop=n))};var a,s;l.scrollToAnimated=function(e,l,i,c){i&&!c&&(c=o);var u=this.scrollLeft(),d=this.scrollTop(),f=Math.round(e-u),p=Math.round(l-d),m=null;a&&(n(a),s.reject());var g=this;if(s=t.defer(),!f&&!p)return s.resolve(),s.promise;var v=function(e){null===m&&(m=e);var t=e-m,n=t>=i?1:c(t/i);g.scrollTo(u+Math.ceil(f*n),d+Math.ceil(p*n)),1>n?a=r(v):(a=null,s.resolve())};return g.scrollTo(u,d),a=r(v),s.promise},l.scrollToElement=function(e,t,n,r){var o=u(this),l=this.scrollTop()+u(e).getBoundingClientRect().top-t;return c(o)&&(l-=o.getBoundingClientRect().top),this.scrollTo(0,l,n,r)};var d={scrollLeft:function(t,n,r){if(angular.isNumber(t))return this.scrollTo(t,this.scrollTop(),n,r);var o=u(this);return i(o)?e.scrollX||document.documentElement.scrollLeft||document.body.scrollLeft:o.scrollLeft},scrollTop:function(t,n,r){if(angular.isNumber(t))return this.scrollTo(this.scrollTop(),t,n,r);var o=u(this);return i(o)?e.scrollY||document.documentElement.scrollTop||document.body.scrollTop:o.scrollTop}},f=function(e,t){return function(n,r){return r?t.apply(this,arguments):e.apply(this,arguments)}};for(var p in d)l[p]=l[p]?f(l[p],d[p]):d[p]}]),angular.module("duScroll.polyfill",[]).factory("polyfill",["$window",function(e){var t=["webkit","moz","o","ms"];return function(n,r){if(e[n])return e[n];for(var o,l=n.substr(0,1).toUpperCase()+n.substr(1),i=0;ie?Math.pow(2*e,2)/2:1-Math.pow(2*(1-e),2)/2};angular.module("duScroll",["duScroll.scrollspy","duScroll.requestAnimation","duScroll.smoothScroll","duScroll.scrollContainer","duScroll.scrollHelpers"]).value("duScrollDuration",350).value("duScrollGreedy",!1).value("duScrollEasing",duScrollDefaultEasing),angular.module("duScroll.scrollHelpers",[]).run(["$window","$q","cancelAnimation","requestAnimation","duScrollEasing",function(e,n,t,r,o){var l=angular.element.prototype;this.$get=function(){return l};var i=function(e){return"undefined"!=typeof HTMLDocument&&e instanceof HTMLDocument||e.nodeType&&e.nodeType===e.DOCUMENT_NODE},u=function(e){return"undefined"!=typeof HTMLElement&&e instanceof HTMLElement||e.nodeType&&e.nodeType===e.ELEMENT_NODE},c=function(e){return u(e)||i(e)?e:e[0]};l.scrollTo=function(n,t,r){var o;if(angular.isElement(n)?o=this.scrollToElement:r&&(o=this.scrollToAnimated),o)return o.apply(this,arguments);var l=c(this);return i(l)?e.scrollTo(n,t):(l.scrollLeft=n,void(l.scrollTop=t))};var a,s;l.scrollToAnimated=function(e,l,i,u){i&&!u&&(u=o);var c=this.scrollLeft(),d=this.scrollTop(),f=Math.round(e-c),p=Math.round(l-d),m=null,g=this,v="scroll mousedown mousewheel touchmove keydown",h=function(e){(!e||e.which>0)&&(g.unbind(v,h),t(a),s.reject(),a=null)};if(a&&h(),s=n.defer(),!f&&!p)return s.resolve(),s.promise;var y=function(e){null===m&&(m=e);var n=e-m,t=n>=i?1:u(n/i);g.scrollTo(c+Math.ceil(f*t),d+Math.ceil(p*t)),1>t?a=r(y):(g.unbind(v,h),a=null,s.resolve())};return g.scrollTo(c,d),g.bind(v,h),a=r(y),s.promise},l.scrollToElement=function(e,n,t,r){var o=c(this),l=this.scrollTop()+c(e).getBoundingClientRect().top-n;return u(o)&&(l-=o.getBoundingClientRect().top),this.scrollTo(0,l,t,r)};var d={scrollLeft:function(n,t,r){if(angular.isNumber(n))return this.scrollTo(n,this.scrollTop(),t,r);var o=c(this);return i(o)?e.scrollX||document.documentElement.scrollLeft||document.body.scrollLeft:o.scrollLeft},scrollTop:function(n,t,r){if(angular.isNumber(n))return this.scrollTo(this.scrollTop(),n,t,r);var o=c(this);return i(o)?e.scrollY||document.documentElement.scrollTop||document.body.scrollTop:o.scrollTop}},f=function(e,n){return function(t,r){return r?n.apply(this,arguments):e.apply(this,arguments)}};for(var p in d)l[p]=l[p]?f(l[p],d[p]):d[p]}]),angular.module("duScroll.polyfill",[]).factory("polyfill",["$window",function(e){var n=["webkit","moz","o","ms"];return function(t,r){if(e[t])return e[t];for(var o,l=t.substr(0,1).toUpperCase()+t.substr(1),i=0;i