Я пытаюсь создать веб-сайт с динамическим меню, которое изменяет элемент активного меню в зависимости от прокрутки. Я смотрел на другие вопросы, подобные этому, и пробовал другой код, но я не могу решить проблему и не могу понять, почему она не работает на моем сайте.Создание активного динамического меню с помощью JQuery
У меня есть код, как это прямо сейчас: https://jsfiddle.net/49rcfg0t/
$(document).ready(function() {
$(document).on("scroll", onScroll);
//smoothscroll
$('a[href^="#"]').on('click', function (e) {
e.preventDefault();
$(document).off("scroll");
$('a').each(function() {
$(this).removeClass('active');
})
$(this).addClass('active');
});
});
function onScroll(event){
var scrollPos = $(document).scrollTop();
$('.topmenu a').each(function() {
var currLink = $(this);
var refElement = $(currLink.attr("href"));
if (refElement.position().top <= scrollPos && refElement.position().top + refElement.height() > scrollPos) {
$('.topmenu a').removeClass("active");
currLink.addClass("active");
}
else{
currLink.removeClass("active");
}
});
}
<link rel="stylesheet" type="text/css" href="portfolio2.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<!--Menu superior-->
<nav class="header">
<div>
<a href="#anchor1" class="topmenu">
<img src="http://es.seaicons.com/wp-content/uploads/2016/05/Number-1-icon.png">
<span id="profile">Menu 1</span>
</a>
<a href="#anchor2" class="topmenu">
<img src="http://es.seaicons.com/wp-content/uploads/2016/05/Number-2-icon.png">
<span id="exp">Menu 2</span>
</a>
<a href="#anchor3" class="topmenu">
<img src="http://es.seaicons.com/wp-content/uploads/2016/05/Number-3-icon.png">
<span id="hab">Menu 3</span>
</a>
<a href="#anchor4" class="topmenu">
<img src="http://es.seaicons.com/wp-content/uploads/2016/05/Number-4-icon.png">
<span id="pro">Menu 4</span>
</a>
<a href="#anchor5" class="topmenu">
<img src="http://es.seaicons.com/wp-content/uploads/2016/05/Number-5-icon.png">
<span id="contact">Menu 5</span>
</a>
</div>
</nav>
<div class="cuerpo">
<span class="anchor" id="anchor1"></span>
<div style="background-color:blue">Area 1</div>
<span class="anchor" id="anchor2"></span>
<div style="background-color:red">Area 2</div>
<span class="anchor" id="anchor3"></span>
<div style="background-color:yellow">Area 3</div>
<span class="anchor" id="anchor4"></span>
<div style="background-color:brown">Area 4</div>
<span class="anchor" id="anchor5"></span>
<div style="background-color:green">Area 5</div>
</div>
У меня есть следующие проблемы:
- Когда я прокручивать вручную элементы не включаются.
- Когда я использую ссылки, элементы активируются, но они не ответ на якорь.
- Я также хотел бы, когда я активирую один из элементов меню , чтобы изменить изображение с другим. Например, изменить первый значок с этим:
Спасибо заранее, эта проблема сводит меня с ума!
Является ли ваше окно на самом деле в переливной (у) состояние? Кроме того, попробуйте $ (window) вместо $ (document) –
Я думаю, вы хотите, чтобы '$ ('. Topmenu a')' был либо '$ ('. Header a')', либо '$ ('a.topmenu') 'в обоих местах, где он появляется в вашей функции' onScroll'. В настоящее время селектор ищет привязки, которые являются дочерними элементами '.topmenu', но привязки в вашем коде являются элементами' .topmenu', а не их дочерними элементами. –