<nav class="nav">
<li><a href="#first">First</a></li>
<li><a href="#second">Second</a></li>
<li><a href="#thirst">Thirst</a></li>
<li><a href="#four">Four</a></li>
</nav>
<h1 id='first'>Заголовок First</h1>
<p>...</p>
<h1 id='second'>Заголовок Second</h1>
<p>...</p>
<h1 id='thirst'>Заголовок Thirst</h1>
<p>...</p>
<h1 id='four'>Заголовок Four</h1>
<p>...</p>
$(document).ready(function(){
$(".nav").on("click","a", function (event) {
// исключаем стандартную реакцию браузера
event.preventDefault();
// получем идентификатор блока из атрибута href
var id = $(this).attr('href'),
// находим высоту, на которой расположен блок
top = $(id).offset().top;
// анимируем переход к блоку, время: 800 мс
$('body,html').animate({scrollTop: top}, 800);
});
});
function scroll_active() {
/* вычисляем значения прокрутки страницы по вертикали */
var window_top = $(window).scrollTop();
/* вычисляем положение якорей на странице от начала страницы по вертикали*/
var menu_top = $('a[name="menu"]').offset().top -10;
var gallery_top = $('a[name="gallery"]').offset().top -10;
/* раздел «Контакты» у меня на странице расположен самым последним разделом, и небольшой, поэтому если контаты уже отобразались на странице, тогда активирую пункт меню «Контакты» */
var contacts_top = $('a[name="contacts"]').offset().top - $(window).height() + 180;
/* Переключатель активного пункта меню в зависимости от положения на странице, условии написаны от последнего якоря на странице, до первого */
/* если на экране отображаются раздел «Контакты»*/
if (window_top > contacts_top) {
$(".main_menu li").removeClass("active");
$('a[href="#contacts"]').parent().addClass("active");
}
/* если не отображается раздел «Контакты», но страницу прокрутили ниже якоря третьего раздела*/
else if (window_top > gallery_top) {
$(".main_menu li").removeClass("active");
$('a[href="#gallery"]').parent().addClass("active");
}
/* если выше третьего, но ниже якоря второго раздела*/
else if (window_top > menu_top) {
$(".main_menu li").removeClass("active");
$('a[href="#menu"]').parent().addClass("active");
}
/* если не подходят условия предыдущие активируем первый пункт меню*/
else {
$(".main_menu li").removeClass("active");
$('a[href="#page_top"]').parent().addClass("active");
}
}
jQuery(function()
{
jQuery(window).scroll(scroll_active);
});
h1:target{
/*тут стиль для подсвечивания*/
}