diff options
Diffstat (limited to 'js/core/smooth-scroll.js')
| -rwxr-xr-x | js/core/smooth-scroll.js | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/js/core/smooth-scroll.js b/js/core/smooth-scroll.js new file mode 100755 index 0000000..789e426 --- /dev/null +++ b/js/core/smooth-scroll.js | |||
| @@ -0,0 +1,62 @@ | |||
| 1 | /*! UIkit 2.26.4 | http://www.getuikit.com | (c) 2014 YOOtheme | MIT License */ | ||
| 2 | (function(UI) { | ||
| 3 | |||
| 4 | "use strict"; | ||
| 5 | |||
| 6 | UI.component('smoothScroll', { | ||
| 7 | |||
| 8 | boot: function() { | ||
| 9 | |||
| 10 | // init code | ||
| 11 | UI.$html.on("click.smooth-scroll.uikit", "[data-uk-smooth-scroll]", function(e) { | ||
| 12 | var ele = UI.$(this); | ||
| 13 | |||
| 14 | if (!ele.data("smoothScroll")) { | ||
| 15 | var obj = UI.smoothScroll(ele, UI.Utils.options(ele.attr("data-uk-smooth-scroll"))); | ||
| 16 | ele.trigger("click"); | ||
| 17 | } | ||
| 18 | |||
| 19 | return false; | ||
| 20 | }); | ||
| 21 | }, | ||
| 22 | |||
| 23 | init: function() { | ||
| 24 | |||
| 25 | var $this = this; | ||
| 26 | |||
| 27 | this.on("click", function(e) { | ||
| 28 | e.preventDefault(); | ||
| 29 | scrollToElement(UI.$(this.hash).length ? UI.$(this.hash) : UI.$("body"), $this.options); | ||
| 30 | }); | ||
| 31 | } | ||
| 32 | }); | ||
| 33 | |||
| 34 | function scrollToElement(ele, options) { | ||
| 35 | |||
| 36 | options = UI.$.extend({ | ||
| 37 | duration: 1000, | ||
| 38 | transition: 'easeOutExpo', | ||
| 39 | offset: 0, | ||
| 40 | complete: function(){} | ||
| 41 | }, options); | ||
| 42 | |||
| 43 | // get / set parameters | ||
| 44 | var target = ele.offset().top - options.offset, | ||
| 45 | docheight = UI.$doc.height(), | ||
| 46 | winheight = window.innerHeight; | ||
| 47 | |||
| 48 | if ((target + winheight) > docheight) { | ||
| 49 | target = docheight - winheight; | ||
| 50 | } | ||
| 51 | |||
| 52 | // animate to target, fire callback when done | ||
| 53 | UI.$("html,body").stop().animate({scrollTop: target}, options.duration, options.transition).promise().done(options.complete); | ||
| 54 | } | ||
| 55 | |||
| 56 | UI.Utils.scrollToElement = scrollToElement; | ||
| 57 | |||
| 58 | if (!UI.$.easing.easeOutExpo) { | ||
| 59 | UI.$.easing.easeOutExpo = function(x, t, b, c, d) { return (t == d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b; }; | ||
| 60 | } | ||
| 61 | |||
| 62 | })(UIkit); | ||
