mirror of
https://github.com/dawidolko/Website-Templates.git
synced 2025-10-28 00:03:10 +01:00
1 line
2.4 KiB
JavaScript
1 line
2.4 KiB
JavaScript
(function(d,c,a,e){var b=function(g,f){this.elem=g;this.$elem=d(g);this.options=f;this.metadata=this.$elem.data("plugin-options");this.$nav=this.$elem.find("a");this.$win=d(c);this.sections={};this.didScroll=false;this.$doc=d(a);this.docHeight=this.$doc.height()};b.prototype={defaults:{currentClass:"current",changeHash:false,easing:"swing",filter:"",scrollSpeed:750,scrollOffset:0,scrollThreshold:0.5,begin:false,end:false,scrollChange:false},init:function(){var f=this;f.config=d.extend({},f.defaults,f.options,f.metadata);if(f.config.filter!==""){f.$nav=f.$nav.filter(f.config.filter)}f.$nav.on("click.onePageNav",d.proxy(f.handleClick,f));f.getPositions();f.bindInterval();f.$win.on("resize.onePageNav",d.proxy(f.getPositions,f));return this},adjustNav:function(f,g){f.$elem.find("."+f.config.currentClass).removeClass(f.config.currentClass);g.addClass(f.config.currentClass)},bindInterval:function(){var g=this;var f;g.$win.on("scroll.onePageNav",function(){g.didScroll=true});g.t=setInterval(function(){f=g.$doc.height();if(g.didScroll){g.didScroll=false;g.scrollChange()}if(f!==g.docHeight){g.docHeight=f;g.getPositions()}},250)},getHash:function(f){return f.attr("href").split("#")[1]},getPositions:function(){var h=this;var i;var g;var f;h.$nav.each(function(){i=h.getHash(d(this));f=d("#"+i);if(f.length){g=f.offset().top;h.sections[i]=Math.round(g)-h.config.scrollOffset}})},getSection:function(i){var f=null;var h=Math.round(this.$win.height()*this.config.scrollThreshold);for(var g in this.sections){if((this.sections[g]-h)<i){f=g}}return f},handleClick:function(j){var g=this;var f=d(j.currentTarget);var i=f.parent();var h="#"+g.getHash(f);if(!i.hasClass(g.config.currentClass)){if(g.config.begin){g.config.begin()}g.adjustNav(g,i);g.unbindInterval();d.scrollTo(h,g.config.scrollSpeed,{axis:"y",easing:g.config.easing,offset:{top:-g.config.scrollOffset},onAfter:function(){if(g.config.changeHash){c.location.hash=h}g.bindInterval();if(g.config.end){g.config.end()}}})}j.preventDefault()},scrollChange:function(){var h=this.$win.scrollTop();var f=this.getSection(h);var g;if(f!==null){g=this.$elem.find('a[href$="#'+f+'"]').parent();if(!g.hasClass(this.config.currentClass)){this.adjustNav(this,g);if(this.config.scrollChange){this.config.scrollChange(g)}}}},unbindInterval:function(){clearInterval(this.t);this.$win.unbind("scroll.onePageNav")}};b.defaults=b.prototype.defaults;d.fn.onePageNav=function(f){return this.each(function(){new b(this,f).init()})}})(jQuery,window,document); |