Ich versuche, eine Website mit einem dynamischen Menü zu erstellen, das das aktive Menüelement je nach dem Bildlauf ändert. Ich habe mir andere ähnliche Fragen angesehen und verschiedene Codes getestet, aber ich kann das Problem nicht lösen und sehe nicht, warum es auf meiner Website nicht funktioniert.Erstellen eines aktiven dynamischen Menüs mit JQuery
Ich habe meinen Code wie dieses Recht jetzt: 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>
Ich habe folgende Probleme:
- Wenn ich manuell die Elemente bewegen sind nicht aktiviert.
- Wenn ich die Links benutze, werden die Elemente aktiviert, aber sie antworten nicht auf die Ankerpetition .
- Ich möchte auch, wenn ich eines der Elemente des Menüs aktivieren, um das Bild mit einem anderen zu ändern. Ändern Sie beispielsweise die erste Symbol mit dieser:
Vielen Dank im Voraus, dieses Problem macht mich verrückt!
Ist Ihr Fenster tatsächlich in einem Überlauf (y) Zustand? Versuchen Sie auch $ (window) anstelle von $ (document) –
Ich denke, Sie wollen '$ ('. Topmenu a')' entweder '$ ('. Header a')' oder '$ ('a.topmenu') 'an beiden Stellen, an denen es in Ihrer 'onScroll'-Funktion erscheint. So wie es jetzt aussieht, sucht der Selektor nach Ankern, die Kinder von '.topmenu' Elementen sind - aber die Anker in Ihrem Code sind die' .topmenu' Elemente, keine Kinder von ihnen. –