Jag gjorde faktiskt detta själv på min site (du ser menyn i action på http://jisuo.se)
Scriptet har du här:
( function($) {
var tick = 0;
var scrollStop = 0;
var $li = $('nav.navigation li');
$(window).scroll(function() {
tick++;
clearTimeout(scrollStop);
scrollStop = setTimeout(updateScrollInfo, 300);
if(tick > 10) {
updateScrollInfo();
}
});
function updateScrollInfo() {
tick = 0;
if (isTop()) {
$li.removeClass('selected');
var $link = $('a.go-home');
$link.parent().addClass('selected');
} else if (isAbout()) {
$li.removeClass('selected');
var $link = $('a.go-about');
$link.parent().addClass('selected');
} else if (isContact()) {
$li.removeClass('selected');
var $link = $('a.go-contact');
$link.parent().addClass('selected');
}
}
function isTop() {
var docViewTop = $(window).scrollTop(), docViewBottom = docViewTop + $(window).height(), elemTop = $('#home').offset().top, elemBottom = elemTop + $('#home').height();
return ((elemBottom >= docViewTop) && (elemTop <= docViewBottom));
}
function isAbout() {
var docViewTop = $(window).scrollTop(), docViewBottom = docViewTop + $(window).height(), elemTop = $('#about').offset().top, elemBottom = elemTop + $('#about').height();
return ((elemBottom >= docViewTop) && (elemTop <= docViewBottom));
}
function isContact() {
var docViewTop = $(window).scrollTop(), docViewBottom = docViewTop + $(window).height(), elemTop = $('#contact').offset().top, elemBottom = elemTop + $('#contact').height();
return ((elemBottom >= docViewTop) && (elemTop <= docViewBottom));
}
if (window.location.hash.substring(1).length) {
$('nav.navigation li').removeClass('selected');
var $link = $('a.go-' + window.location.hash.substring(1));
$link.parent().addClass('selected');
}
$('nav.navigation').localScroll({
duration : 1500,
hash : true
});
}(jQuery));
Det jag gör är att jag håller på koll på när jag scrollar och kollar kontinuerligt om jag är vid en viss del av siten.
Edit: Jag kollar även om man går direkt till en sektion och markerar då rätt menyval (lite haxigt) med location.hash