wp/wp-content/themes/IN-MOTION-package-u1/in-motion/js/jquery.nav.js
changeset 0 d970ebf37754
equal deleted inserted replaced
-1:000000000000 0:d970ebf37754
       
     1 /*
       
     2  * jQuery One Page Nav Plugin
       
     3  * http://github.com/davist11/jQuery-One-Page-Nav
       
     4  *
       
     5  * Copyright (c) 2010 Trevor Davis (http://trevordavis.net)
       
     6  * Dual licensed under the MIT and GPL licenses.
       
     7  * Uses the same license as jQuery, see:
       
     8  * http://jquery.org/license
       
     9  *
       
    10  * @version 0.7
       
    11  *
       
    12  * Example usage:
       
    13  * $('#nav').onePageNav({
       
    14  *   currentClass: 'current',
       
    15  *   changeHash: false,
       
    16  *   scrollSpeed: 750
       
    17  * });
       
    18  */
       
    19 ;(function($) {
       
    20   $.fn.onePageNav = function(options) {
       
    21     var opts = $.extend({}, $.fn.onePageNav.defaults, options),
       
    22         onePageNav = {};
       
    23     
       
    24     onePageNav.sections = {};
       
    25     
       
    26     onePageNav.bindNav = function($el, $this, o) {
       
    27       var $par = $el.parent(),
       
    28           newLoc = $el.attr('href'),
       
    29           $win = $(window);
       
    30 
       
    31       if(!$par.hasClass(o.currentClass)) {
       
    32         if(o.begin) {
       
    33           o.begin();
       
    34         }
       
    35         onePageNav.adjustNav($this, $par, o.currentClass);
       
    36         $win.unbind('.onePageNav');
       
    37         $.scrollTo(newLoc, o.scrollSpeed, {
       
    38           offset: {
       
    39             top: -o.scrollOffset
       
    40           },
       
    41           onAfter: function() {
       
    42             if(o.changeHash) {
       
    43               window.location.hash = newLoc;
       
    44             }
       
    45             $win.bind('scroll.onePageNav', function() {
       
    46               onePageNav.scrollChange($this, o);
       
    47             });
       
    48             if(o.end) {
       
    49               o.end();
       
    50             }
       
    51           }
       
    52         });
       
    53       }
       
    54     };
       
    55     
       
    56     onePageNav.adjustNav = function($this, $el, curClass) {
       
    57       $this.find('.'+curClass).removeClass(curClass);
       
    58       $el.addClass(curClass);
       
    59     };
       
    60     
       
    61     onePageNav.getPositions = function($this, o) {
       
    62       $this.find('a').each(function() {
       
    63         var linkHref = $(this).attr('href'),
       
    64             divPos = $(linkHref).offset(),
       
    65             topPos = divPos.top;
       
    66             
       
    67         onePageNav.sections[linkHref.substr(1)] = Math.round(topPos) - o.scrollOffset;
       
    68       });
       
    69     };
       
    70     
       
    71     onePageNav.getSection = function(windowPos) {
       
    72       var returnValue = '',
       
    73           windowHeight = Math.round($(window).height() / 2);
       
    74       
       
    75       for(var section in onePageNav.sections) {
       
    76         if((onePageNav.sections[section] - windowHeight) < windowPos) {
       
    77           returnValue = section;
       
    78         }
       
    79       }
       
    80       return returnValue;
       
    81     };
       
    82     
       
    83     onePageNav.scrollChange = function($this, o) {
       
    84       onePageNav.getPositions($this, o);
       
    85       
       
    86       var windowTop = $(window).scrollTop(),
       
    87           position = onePageNav.getSection(windowTop);
       
    88           
       
    89       if(position !== '') {
       
    90         onePageNav.adjustNav($this,$this.find('a[href=#'+position+']').parent(), o.currentClass);
       
    91       }
       
    92     };
       
    93     
       
    94     onePageNav.init = function($this, o) {
       
    95       var didScroll = false;
       
    96       
       
    97       $this.find('a').bind('click', function(e) {
       
    98         onePageNav.bindNav($(this), $this, o);
       
    99         e.preventDefault();
       
   100       });
       
   101     
       
   102       onePageNav.getPositions($this, o);
       
   103     
       
   104       $(window).bind('scroll.onePageNav', function() {
       
   105         didScroll = true;
       
   106       });
       
   107 
       
   108       setInterval(function() {
       
   109         if(didScroll) {
       
   110           didScroll = false;
       
   111           onePageNav.scrollChange($this, o);
       
   112         }
       
   113       }, 250);
       
   114     };
       
   115     
       
   116     return this.each(function() {
       
   117       var $this = $(this),
       
   118           o = $.meta ? $.extend({}, opts, $this.data()) : opts;
       
   119       
       
   120       onePageNav.init($this, o);
       
   121     
       
   122     });
       
   123   };
       
   124 
       
   125   // default options
       
   126   $.fn.onePageNav.defaults = {
       
   127     currentClass: 'current',
       
   128     changeHash: false,
       
   129     scrollSpeed: 0,
       
   130     scrollOffset: 0,
       
   131     begin: false,
       
   132     end: false
       
   133   };
       
   134 
       
   135 })(jQuery);