Фиксированное меню с подсветкой активного пункта
В данной статье мы рассмотрим как создать фиксированное меню с подсветкой активного пункта меню при прокрутке страницы.
Для крупных справочников, документаций и прочих сайтов с большим количеством информации на одной странице особо остро возникает необходимость качественной навигации. Зачастую данную проблему пытаются решить с помощью «ссылок-якорей», но этого всё равно недостаточно.
Пример фиксированного меню:

Создание фиксированного меню
Создаём структуру нашей страницы. Для удобства верстки я подключил bootstrap
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | <!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Demo</title>
<!-- Bootstrap -->
<link href="css/bootstrap.min.css" rel="stylesheet">
<link href="css/style.css" rel="stylesheet">
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
</head>
<body>
<div class="container-fluid">
<div class="row">
<div class="col-lg-8 col-md-8 col-sm-8 col-xs-12">
<section id="block1">
block1
</section>
<section id="block2">
block2
</section>
<section id="block3">
block3
</section>
<section id="block4">
block4
</section>
</div>
<div class="col-lg-4 col-md-4 col-sm-4 col-xs-12 right-fixed-menu">
<ul class="nav nav-pills nav-stacked">
<li class="active"><a href="#block1">Главная</a></li>
<li><a href="#block2">Профиль</a></li>
<li><a href="#block3">Сообщение</a></li>
<li><a href="#block4">Контакты</a></li>
</ul>
</div>
</div>
</div>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<!-- Include all compiled plugins (below), or include individual files as needed -->
<script src="js/bootstrap.min.js"></script>
<script src="js/script.js"></script>
</body>
</html> |
Добавляем стили к нашим блокам:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #block1{ height: 400px; width:100%; display: block; background-color: #ffa2a2; } #block2{ height: 400px; width:100%; display: block; background-color: #b4ffb4; } #block3{ height: 400px; width:100%; display: block; background-color: #6f6fff; } #block4{ height: 400px; width:100%; display: block; margin-bottom:500px; background-color: #ccc; } .nav-pills.nav-stacked{ position: fixed; right:0px; top:0px; } |
Отлично. Наша страница готова, осталось добавить эффект смены активного пункта при прокрутке страницы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | $(document).ready(function () { function Scroll_block(){ var scroll_top = $(document).scrollTop(); $(".right-fixed-menu a").each(function(){ var hash = $(this).attr("href"); var target = $(hash); if (target.position().top <= scroll_top && target.position().top + target.outerHeight() > scroll_top) { $(".right-fixed-menu li.active").parent().removeClass("active"); $(this).parent().addClass("active"); } else { $(this).parent().removeClass("active"); } }); } $(document).on("scroll", Scroll_block); $("a[href^=#]").click(function(e){ e.preventDefault(); $(document).off("scroll"); $(".right-fixed-menu li.active").parent().removeClass("active"); $(this).parent().addClass("active"); var hash = $(this).attr("href"); var target = $(hash); $("html, body").animate({ scrollTop: target.offset().top }, 500, function(){ window.location.hash = hash; $(document).on("scroll", Scroll_block); }); }); }); |
Готово. Теперь, несмотря на большое количество информации, посетителям будет удобнее ориентироваться в вашем сайте.



11 мая 2017 /
12155 Views /
6 комментариев