Ich habe eine Webseite mit einer oberen horizontalen Navigationsleiste - es ist Twitter Bootstrap Fixed Top Navbar, um genauer zu sein - mit einer unteren festen Position (Tatsächlich wird es nicht wirklich von CSS korrigiert; siehe unten). Die Navigationsleiste wird also zuerst unten auf der Seite angezeigt und später beim Scrollen oben auf der Seite angezeigt (position: fixed; top: 0
).Twitter Bootstrap fixed-to-top Navbar auf Bildlauf mit in-Seite Anker Links Bouncing
Ich habe die Navigationslinks mit Anker-Tags eingerichtet, um den Betrachter an verschiedene Stellen im Hauptteil der Seite zu bringen. Leider nimmt es manchmal den Benutzer etwas zu weit unten (besonders wenn der Benutzer oben auf der Seite ist und die Navigationsleiste noch nicht fixiert wurde).
einen Blick auf meine HTML-Struktur Nehmen:
<div id="landing"></div>
<nav class="navbar navbar-default">
<div class="container-fluid">
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li><a href="#landing">Home</a></li>
<li><a href="#section1">Section 1</a></li>
<li><a href="#section2">Section 2</a></li>
<li><a href="#section3">Section 3</a></li>
</ul>
</div>
</div>
</nav>
<div id="section1"></div>
<div id="section2"></div>
<div id="section3"></div>
ich folgende JavaScript bin mit sicher, dass die navbar klebt an der Spitze der Seite nach unten scrollen:
function init() {
nh = 50; // navbar height
sh = $(window).height();
ih = sh-nh;
$("#landing").css('height', ih+'px');
}
function navbarState() {
if ($(window).scrollTop() > ih) {
$('.navbar').addClass('navbar-fixed-top');
} else {
$('.navbar').removeClass('navbar-fixed-top');
}
}
init();
navbarState();
$(window).on('load scroll resize orientationchange', function() {
init();
navbarState();
});
One kann beobachten, dass wiederholtes Drücken der ersten Ankerverbindung einen Bounce-Effekt verursacht. Wie kann ich das verhindern?
Mein Ziel ist es, die Navigation zu den richtigen Ankern scrollen zu lassen, egal ob der Benutzer auf der Zielseite ist oder nicht.
* Sie sind frei, eine Antwort zu akzeptieren, wenn es Ihnen geholfen hat und Sie keine weiteren Fragen haben. **:) ** Ansonsten können Sie gerne fragen. * – Seika85