forked from davist11/jQuery-One-Page-Nav
-
Notifications
You must be signed in to change notification settings - Fork 1
/
jquery.nav.min.js
12 lines (12 loc) · 2.03 KB
/
jquery.nav.min.js
1
2
3
4
5
6
7
8
9
10
11
12
/*
* jQuery One Page Nav Plugin
* http://github.com/davist11/jQuery-One-Page-Nav
*
* Copyright (c) 2010 Trevor Davis (http://trevordavis.net)
* Dual licensed under the MIT and GPL licenses.
* Uses the same license as jQuery, see:
* http://jquery.org/license
*
* @version 1.0
*/
(function(a){a.fn.onePageNav=function(b){var c=a.extend({},a.fn.onePageNav.defaults,b),d={};d.sections={};d.bindNav=function(f,h,i){var g=f.parent(),e="#"+f.attr("href").split("#")[1],j=a(window);if(!g.hasClass(i.currentClass)){if(i.begin){i.begin()}d.adjustNav(h,g,i.currentClass);j.unbind(".onePageNav");a.scrollTo(e,i.scrollSpeed,{easing:i.easing,offset:{top:-i.scrollOffset},onAfter:function(){if(i.changeHash){window.location.hash=e}j.bind("scroll.onePageNav",function(){d.scrollChange(h,i)});if(i.end){i.end()}}})}};d.adjustNav=function(g,e,f){g.find("."+f).removeClass(f);e.addClass(f)};d.getPositions=function(f,g){var e=f.find("a");if(g.filter!==""){e=e.filter(g.filter)}e.each(function(){var i=a(this).attr("href").split("#")[1],h=a("#"+i).offset().top;d.sections[i]=Math.round(h)-g.scrollOffset})};d.getSection=function(i,g){var e,h;if(g.scrollThreshold>1){h=g.scrollThreshold}else{h=Math.round(a(window).height()*g.scrollThreshold)}for(var f in d.sections){if((d.sections[f]-h)<i){e=f}}return e};d.scrollChange=function(g,h){d.getPositions(g,h);var f=a(window).scrollTop(),e=d.getSection(f,h);if(e!==""){d.adjustNav(g,g.find('a[href$="#'+e+'"]').parent(),h.currentClass);if(h.change){h.change(e)}}};d.init=function(g,h){var f=false,e=g.find("a");if(h.filter!==""){e=e.filter(h.filter)}e.bind("click",function(i){d.bindNav(a(this),g,h);i.preventDefault()});d.getPositions(g,h);a(window).bind("scroll.onePageNav",function(){f=true});setInterval(function(){if(f){f=false;d.scrollChange(g,h)}},250)};return this.each(function(){var e=a(this),f=a.meta?a.extend({},c,e.data()):c;d.init(e,f)})};a.fn.onePageNav.defaults={currentClass:"current",changeHash:false,easing:"swing",filter:"",scrollSpeed:750,scrollOffset:0,scrollThreshold:0.5,begin:false,end:false,change:false}})(jQuery);