navigation - How do I change the color of each element on scroll using jQuery offset()? -


i wrote script makes navigation stick top of screen once passes point. works great decided try write script highlights section on nav reaches section in page. problem estimated amount of pixels each section. know can use jquery .offset() make more precise i'm not sure how write within current script. below relevant html , javascript. appreciate solid suggestions. thanks.

<nav class='pink-bar'><!--<img class='nav' src='assets/nav.png' alt='navigation bar' />  -->      <div class='content'>             <ul class='menu'>                 <li id='menu-1'>home</li>                 <li id='menu-2'>buy experience</li>                 <li id='menu-3'>barter</li>                 <li id='menu-4'>preview</li>                 <li id='menu-5'>about</li>             </ul>   $(function() {    var num = 460; //number of pixels before modifying styles    var num2 = 2862;    var num3 = 3715;    var num4 = 4510;  $(window).on('scroll', function () {     if  ($(window).scrolltop() > num4)     {   $('.pink-bar').addclass('fixed');         $('#menu-5').addclass('scrollnav');         $('#menu-4, #menu-3, #menu-2,').removeclass('scrollnav');       } else if ($(window).scrolltop() > num3)     {   $('.pink-bar').addclass('fixed');         $('#menu-4').addclass('scrollnav');         $('#menu-5, #menu-3, #menu-2 ').removeclass('scrollnav');      } else if  ($(window).scrolltop() > num2)     {   $('.pink-bar').addclass('fixed');         $('#menu-3').addclass('scrollnav');         $('#menu-4, #menu-5, #menu-2').removeclass('scrollnav');      } else if  ($(window).scrolltop() > num) {         $('.pink-bar').addclass('fixed');         $('#menu-2').addclass('scrollnav');         $('#menu-3, #menu-5, #menu-3').removeclass('scrollnav');      }  else {         $('.pink-bar').removeclass('fixed');         $('#menu-2, #menu-3, #menu-4, #menu-5').removeclass('scrollnav');     }      });  }); 

what about:

var num = $('#menu-1').offset().top; var num2 = $('#menu-2').offset().top;  

you may have fiddle take account of margins , borders depending on style.

a better way give menu items single class, loop through them $('.menu-class').each(...) , decide given (adjusted offset) , current position. make extensible more elements.


Comments

Popular posts from this blog

ios - UICollectionView Self Sizing Cells with Auto Layout -

node.js - ldapjs - write after end error -

DOM Manipulation in Wordpress (and elsewhere) using php -