-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathjquery.navScroll.min.js
9 lines (9 loc) · 2.02 KB
/
jquery.navScroll.min.js
1
2
3
4
5
6
7
8
9
/*!
* NavScroll.js
* Version: 1.4.1
* Author: Jeroen Hammann
*
* Copyright (c) 2014 Jeroen Hammann
* Released under the MIT license
*/
!function(t,e,a,o){"use strict";function n(e,a){this.element=e,this.options=t.extend({onScrollStart:function(){},onScrollEnd:function(){}},l,a),this._defaults=l,this._name=i,this.init()}var i="navScroll",l={scrollTime:500,navItemClassName:"",navHeight:"auto",mobileDropdown:!1,mobileDropdownClassName:"",mobileBreakpoint:1024,scrollSpy:!1,activeParent:!1,activeClassName:"active"};n.prototype={init:function(){var a,n,i,l,s,r;if(a=this,n=a.options,i=a.element,l=""===n.navItemClassName?t(i).find("a"):t(i).find("."+n.navItemClassName),"auto"===n.navHeight)s=t(i).height();else{if(isNaN(n.navHeight))throw new Error("'navHeight' only accepts 'auto' or a number as value.");s=n.navHeight}if(l.on("click",function(a){var l,c,m,h,p;l=this.href,c=l.split("#"),m=c[1],m!==o&&(a.preventDefault(),h=t("#"+m).offset(),p=h.top),r=t(this).data("scrolltime")!==o?t(this).data("scrolltime"):n.scrollTime,n.mobileDropdown&&t(e).width()>=0&&t(e).width()<=n.mobileBreakpoint&&(""===n.mobileDropdownClassName?t(i).find("ul").slideUp("fast"):t("."+n.mobileDropdownClassName).slideUp("fast")),t("html, body").stop().animate({scrollTop:p-s},r).promise().done(function(){n.onScrollEnd.call(this)}),n.onScrollStart.call(this)}),n.scrollSpy){var c;c=[],l.each(function(){var e=t(this).attr("href");"#"===e.charAt(0)&&c.push(t(e))}),t(e).on("scroll",function(){a.scrollspy(n,l,c)}),a.scrollspy(n,l,c)}},scrollspy:function(n,i,l){var s,r,c,m;for(s=a.documentElement&&a.documentElement.scrollTop||a.body.scrollTop,r=e.innerHeight/2||a.documentElement.clientHeight/2,m=i.length,c=0;m>c;c++){var h=l[c];h!==o&&s>h.offset().top-r&&(n.activeParent?(i.parent().removeClass(n.activeClassName),t(i[c]).parent().addClass(n.activeClassName)):(i.removeClass(n.activeClassName),t(i[c]).addClass(n.activeClassName)))}}},t.fn[i]=function(e){return this.each(function(){t.data(this,"plugin_"+i)||t.data(this,"plugin_"+i,new n(this,e))})}}(jQuery,window,document);