summaryrefslogtreecommitdiff
path: root/build/resources/main/static/js/scrollIt.js
diff options
context:
space:
mode:
Diffstat (limited to 'build/resources/main/static/js/scrollIt.js')
-rw-r--r--build/resources/main/static/js/scrollIt.js129
1 files changed, 129 insertions, 0 deletions
diff --git a/build/resources/main/static/js/scrollIt.js b/build/resources/main/static/js/scrollIt.js
new file mode 100644
index 0000000..2985271
--- /dev/null
+++ b/build/resources/main/static/js/scrollIt.js
@@ -0,0 +1,129 @@
+/**
+ * ScrollIt
+ * ScrollIt.js(scroll•it•dot•js) makes it easy to make long, vertically scrolling pages.
+ *
+ * Latest version: https://github.com/cmpolis/scrollIt.js
+ *
+ * License <https://github.com/cmpolis/scrollIt.js/blob/master/LICENSE.txt>
+ */
+(function($) {
+ 'use strict';
+
+ var pluginName = 'ScrollIt',
+ pluginVersion = '1.0.3';
+
+ /*
+ * OPTIONS
+ */
+ var defaults = {
+ upKey: 38,
+ downKey: 40,
+ easing: 'linear',
+ scrollTime: 600,
+ activeClass: 'active',
+ onPageChange: null,
+ topOffset : 0
+ };
+
+ $.scrollIt = function(options) {
+
+ /*
+ * DECLARATIONS
+ */
+ var settings = $.extend(defaults, options),
+ active = 0,
+ lastIndex = $('[data-scroll-index]:last').attr('data-scroll-index');
+
+ /*
+ * METHODS
+ */
+
+ /**
+ * navigate
+ *
+ * sets up navigation animation
+ */
+ var navigate = function(ndx) {
+ if(ndx < 0 || ndx > lastIndex) return;
+
+ var targetTop = $('[data-scroll-index=' + ndx + ']').offset().top + settings.topOffset + 1;
+ $('html,body').animate({
+ scrollTop: targetTop,
+ easing: settings.easing
+ }, settings.scrollTime);
+ };
+
+ /**
+ * doScroll
+ *
+ * runs navigation() when criteria are met
+ */
+ var doScroll = function (e) {
+ var target = $(e.target).closest("[data-scroll-nav]").attr('data-scroll-nav') ||
+ $(e.target).closest("[data-scroll-goto]").attr('data-scroll-goto');
+ navigate(parseInt(target));
+ };
+
+ /**
+ * keyNavigation
+ *
+ * sets up keyboard navigation behavior
+ */
+ var keyNavigation = function (e) {
+ var key = e.which;
+ if($('html,body').is(':animated') && (key == settings.upKey || key == settings.downKey)) {
+ return false;
+ }
+ if(key == settings.upKey && active > 0) {
+ navigate(parseInt(active) - 1);
+ return false;
+ } else if(key == settings.downKey && active < lastIndex) {
+ navigate(parseInt(active) + 1);
+ return false;
+ }
+ return true;
+ };
+
+ /**
+ * updateActive
+ *
+ * sets the currently active item
+ */
+ var updateActive = function(ndx) {
+ if(settings.onPageChange && ndx && (active != ndx)) settings.onPageChange(ndx);
+
+ active = ndx;
+ $('[data-scroll-nav]').removeClass(settings.activeClass);
+ $('[data-scroll-nav=' + ndx + ']').addClass(settings.activeClass);
+ };
+
+ /**
+ * watchActive
+ *
+ * watches currently active item and updates accordingly
+ */
+ var watchActive = function() {
+ var winTop = $(window).scrollTop();
+
+ var visible = $('[data-scroll-index]').filter(function(ndx, div) {
+ return winTop >= $(div).offset().top + settings.topOffset &&
+ winTop < $(div).offset().top + (settings.topOffset) + $(div).outerHeight()
+ });
+ var newActive = visible.first().attr('data-scroll-index');
+ updateActive(newActive);
+ };
+
+ /*
+ * runs methods
+ */
+ $(window).on('scroll',watchActive).scroll();
+
+ $(window).on('keydown', keyNavigation);
+
+ $('body').on('click','[data-scroll-nav], [data-scroll-goto]', function(e){
+ e.preventDefault();
+ doScroll(e);
+ });
+
+ };
+}(jQuery));