diff --git a/README.md b/README.md index fc602b2..686a6ee 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,11 @@ angular.module('myApp', ['duScroll']). var chunk = 200; //Scroll 200px down from current scroll position scroller.scrollDelta(x, chunk, duration); + + var offset = 30; //pixels; adjust for floating menu, context etc + //Scroll to #some-id with 30 px "padding" + //Note: Use this in a directive, not with document.getElementById + scroller.scrollToElement(document.getElementById('some-id'), offset, duration); } ); ``` diff --git a/angular-scroll.js b/angular-scroll.js index 73c13fa..6fdbb7f 100644 --- a/angular-scroll.js +++ b/angular-scroll.js @@ -97,9 +97,18 @@ factory('scroller', scrollTo(scrollPosition.x() + (x || 0), scrollPosition.y() + (y || 0), duration); } + function scrollToElement(element, offset, duration){ + if(!element || !element.getBoundingClientRect) return; + + var pos = element.getBoundingClientRect(); + + scrollDelta(0, pos.top + (!offset || isNaN(offset) ? 0 : -offset), duration); + } + return { - scrollTo: scrollTo, - scrollDelta: scrollDelta + scrollTo: scrollTo, + scrollToElement: scrollToElement, + scrollDelta: scrollDelta }; } ); diff --git a/angular-scroll.min.js b/angular-scroll.min.js index 9e35455..66ffc35 100644 --- a/angular-scroll.min.js +++ b/angular-scroll.min.js @@ -1,2 +1,2 @@ -angular.module("duScroll",["duScroll.scroller","duScroll.scrollPosition","duScroll.scrollspy","duScroll.requestAnimation","duScroll.smoothScroll"]),angular.module("duScroll.requestAnimation",[]).factory("requestAnimation",["$window","$timeout",function(a,b){return a.requestAnimationFrame||a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame||a.msRequestAnimationFrame||function(a){b(a,1e3/60)}}]),angular.module("duScroll.scrollPosition",["duScroll.requestAnimation"]).factory("scrollPosition",["$document","$window","requestAnimation",function(a,b,c){var d=[],e=0,f=0,g=function(){f=e;for(var a=0;aj&&b(l)};l()}}function f(a,b,d){e(c.x()+(a||0),c.y()+(b||0),d)}return{scrollTo:e,scrollDelta:f}}]),angular.module("duScroll.smoothScroll",["duScroll.scroller"]).directive("duSmoothScroll",["scroller",function(a){return{link:function(b,c,d){var e=angular.element(c[0]);e.on("click",function(b){if(d.href&&-1!==d.href.indexOf("#")){var c=document.getElementById(d.href.replace(/.*(?=#[^\s]+$)/,"").substring(1));if(c&&c.getBoundingClientRect){b.stopPropagation&&b.stopPropagation(),b.preventDefault&&b.preventDefault();var e=-(d.offset?parseInt(d.offset,10):0),f=c.getBoundingClientRect();a.scrollDelta(0,f.top+(isNaN(e)?0:e),1e3)}}})}}}]),angular.module("duScroll.scrollspy",["duScroll.scrollPosition"]).directive("duScrollspy",["scrollPosition",function(a){function b(){for(var a,b,c,f=0;fj&&b(l)};l()}}function f(a,b,d){e(c.x()+(a||0),c.y()+(b||0),d)}function g(a,b,c){if(a&&a.getBoundingClientRect){var d=a.getBoundingClientRect();f(0,d.top+(!b||isNaN(b)?0:-b),c)}}return{scrollTo:e,scrollToElement:g,scrollDelta:f}}]),angular.module("duScroll.smoothScroll",["duScroll.scroller"]).directive("duSmoothScroll",["scroller",function(a){return{link:function(b,c,d){var e=angular.element(c[0]);e.on("click",function(b){if(d.href&&-1!==d.href.indexOf("#")){var c=document.getElementById(d.href.replace(/.*(?=#[^\s]+$)/,"").substring(1));if(c&&c.getBoundingClientRect){b.stopPropagation&&b.stopPropagation(),b.preventDefault&&b.preventDefault();var e=-(d.offset?parseInt(d.offset,10):0),f=c.getBoundingClientRect();a.scrollDelta(0,f.top+(isNaN(e)?0:e),1e3)}}})}}}]),angular.module("duScroll.scrollspy",["duScroll.scrollPosition"]).directive("duScrollspy",["scrollPosition",function(a){function b(){for(var a,b,c,f=0;fSection 4

Shoulder cow tenderloin chuck, pork chop jerky doner leberkas. Chuck sausage hamburger, kevin beef pork chop pork shoulder ground round ball tip turducken flank. Bresaola tri-tip meatloaf, salami venison tail pig shank shankle jowl sausage brisket cow biltong turducken. Swine turducken hamburger ball tip short loin prosciutto kevin jowl tri-tip. Doner meatloaf pork brisket.

- + or
- +