Ich habe dies als “Benötigt mehr Fokus (zu breit)” geschlossen, weil Sie nach zwei verschiedenen Effekten fragen: A) mit einer Navigationsleiste, die oben auf der Seite bleibt, und B) mit einem Popup-Fenster auf der linken Seite oder rechts auf der Seite, wenn der Benutzer nach unten scrollt. Obwohl diese möglicherweise verwandt sind, handelt es sich um deutlich unterschiedliche Effekte, die unterschiedliche Implementierungen haben. Sie fragen auch nach “wo ich einen Ausschnitt finden kann”, was eine Off-Topic-Ressourcenanfrage ist. Dies könnte jedoch herausgearbeitet werden, wenn alle Antworten damit kompatibel sind.
– Makyen ♦
9. Januar um 17:33 Uhr
adam
Dieser Effekt wird normalerweise durch eine jquery-Logik wie folgt erreicht:
$(window).bind('scroll', function () {
if ($(window).scrollTop() > 50) {
$('.menu').addClass('fixed');
} else {
$('.menu').removeClass('fixed');
}
});
Dies besagt, sobald das Fenster über eine bestimmte Anzahl vertikaler Pixel hinaus gescrollt ist, fügt es dem Menü eine Klasse hinzu, die seinen Positionswert auf “fest” ändert.
Könntest du das nicht verkürzen, indem du so etwas machst: $('.menu').toggleClass('fixed', $(window).scrollTop() > 50);?
– Michael J. Calkins
4. März ’14 um 16:30 Uhr
@MichaelCalkins Ja (ein anderer ist: $('.menu')[($(window).scrollTop() > num ? 'add' : 'remove') + 'Class']('fixed');), aber ich denke, die Art und Weise, wie es geschrieben ist, ermöglicht eine maximale Lesbarkeit.
– adam
4. März 14 um 18:07 Uhr
Für IE müssen Sie möglicherweise hinzufügen z-index:1; unter .fixed um sicherzustellen, dass das Menü übertrieben ist.
– Ivan Chau
24. Juli 14 um 15:20 Uhr
Leider löst diese Implementierung jede Funktion/Interaktion, die Sie in der if-Anweisung platzieren, 6 Mal jedes Mal aus, wenn der Benutzer einen Bildlauf durchführt, und 9 Mal jedes Mal, wenn er auf den Pfeil nach unten oder oben auf die Bildlaufleiste klickt. Mögliche Lösung für die mehreren Ereignisse hier: stackoverflow.com/questions/9613594/…
– JPEG
21. September 16 um 21:09 Uhr
toggleClass() verkürzt den Code, aber es gibt ein seltsames Flackern beim Umschalten zwischen den Klassen.
– Achil
15. Juni 17 um 3:33 Uhr
In diesem Beispiel können Sie Ihr Menü zentriert anzeigen.
HTML
<div id="main-menu-container">
<div id="main-menu">
//your menu
</div>
</div>
CSS
.f-nav{ /* To fix main menu container */
z-index: 9999;
position: fixed;
left: 0;
top: 0;
width: 100%;
}
#main-menu-container {
text-align: center; /* Assuming your main layout is centered */
}
#main-menu {
display: inline-block;
width: 1024px; /* Your menu's width */
}
JS
$("document").ready(function($){
var nav = $('#main-menu-container');
$(window).scroll(function () {
if ($(this).scrollTop() > 125) {
nav.addClass("f-nav");
} else {
nav.removeClass("f-nav");
}
});
});
wie Adamb, aber ich würde eine dynamische Variable num hinzufügen
num = $('.menuFlotante').offset().top;
um den genauen Versatz oder die genaue Position innerhalb des Fensters zu erhalten, um zu vermeiden, die richtige Position zu finden.
$(window).bind('scroll', function() {
if ($(window).scrollTop() > num) {
$('.menu').addClass('fixed');
}
else {
num = $('.menuFlotante').offset().top;
$('.menu').removeClass('fixed');
}
});
Das ist großartig, da es einen häufigen Fehler vermeidet, der bei anderen Beispielen auftritt. Chrome neigt dazu, manchmal eine dumme und unsinnige Lücke zwischen und dem ersten
hinzuzufügen, normalerweise mit der Höhe dieses
. Danke.
– BornKillaz
9. Februar 15 um 7:35 Uhr
+1 Dies ist eine bessere Lösung! aufgrund der Verwendung des Variablenwerts zum Vergleich von .scrollTop(), und ist hilfreich, wenn Sie Websites auf verschiedenen Geräten wie iPad usw. durchsuchen, die sich in der Art und Weise unterscheiden, wie sich die Desktop-Browser verhalten würden.
– Irf
30. August 15 um 17:27 Uhr
@BornKillaz, es kann durch Anwenden der CSS-Regel sortiert werden *:empty {display:none;}
– Stormec56
19. Januar 17 um 12:11 Uhr
Bilal Iqbal
Oder tun Sie dies dynamischer
$(window).bind('scroll', function () {
var menu = $('.menu');
if ($(window).scrollTop() > menu.offset().top) {
menu.addClass('fixed');
} else {
menu.removeClass('fixed');
}
});
In CSS Klasse hinzufügen
.fixed {
position: fixed;
top: 0;
}
Dies ist der richtige Weg, es zu tun. Lassen Sie CSS tun, wofür es entwickelt wurde. Das Hinzufügen von Funktionen in JQuery fügt Ihrem Projekt unnötige Masse hinzu.
– Pseudo-Ninja
7. November 12 um 17:40 Uhr
@PseudoNinja Ja, aber wenn Sie sich die Seite ansehen, die Wilson als Beispiel bereitgestellt hat, ist die Menüleiste nur “fixiert”, wenn der Benutzer über ihre relative Positionierung hinaus gescrollt hat. Dies kann mit CSS allein nicht erreicht werden.
// Create a clone of the menu, right next to original.
$('.menu').addClass('original').clone().insertAfter('.menu').addClass('cloned').css('position','fixed').css('top','0').css('margin-top','0').css('z-index','500').removeClass('original').hide();
scrollIntervalID = setInterval(stickIt, 10);
function stickIt() {
var orgElementPos = $('.original').offset();
orgElementTop = orgElementPos.top;
if ($(window).scrollTop() >= (orgElementTop)) {
// scrolled past the original position; now only show the cloned, sticky element.
// Cloned element should always have same left position and width as original element.
orgElement = $('.original');
coordsOrgElement = orgElement.offset();
leftOrgElement = coordsOrgElement.left;
widthOrgElement = orgElement.css('width');
$('.cloned').css('left',leftOrgElement+'px').css('top',0).css('width',widthOrgElement+'px').show();
$('.original').css('visibility','hidden');
} else {
// not scrolled past the menu; only show the original menu.
$('.cloned').hide();
$('.original').css('visibility','visible');
}
}
Probier diese. backslash.gr/demos/jquery-sticky-navigation
– Marko Francekovic
7. November 12 um 17:12 Uhr
Ich habe dies als “Benötigt mehr Fokus (zu breit)” geschlossen, weil Sie nach zwei verschiedenen Effekten fragen: A) mit einer Navigationsleiste, die oben auf der Seite bleibt, und B) mit einem Popup-Fenster auf der linken Seite oder rechts auf der Seite, wenn der Benutzer nach unten scrollt. Obwohl diese möglicherweise verwandt sind, handelt es sich um deutlich unterschiedliche Effekte, die unterschiedliche Implementierungen haben. Sie fragen auch nach “wo ich einen Ausschnitt finden kann”, was eine Off-Topic-Ressourcenanfrage ist. Dies könnte jedoch herausgearbeitet werden, wenn alle Antworten damit kompatibel sind.
– Makyen
♦
9. Januar um 17:33 Uhr