Lassen Sie die Menüleiste beim Scrollen oben fixiert [closed]

Lesezeit: 6 Minuten

Lassen Sie die Menuleiste beim Scrollen oben fixiert closed
Wilson

Ich habe einige Websites gesehen, auf denen, wenn der Benutzer auf der Seite nach unten scrollt, rechts oder links ein Kästchen auftaucht …

Beachten Sie auch diese Vorlage: http://www.mvpthemes.com/maxmag/ Der Designer macht einen guten Job und lässt die Navigationsleiste oben fixiert.

Nun, wie werden diese gemacht? Ich denke, es verwendet jquery, um die Position der Seite zu ermitteln und das Feld anzuzeigen.

Können Sie mir bitte zeigen, wo ich einen Ausschnitt finden kann, damit ich lernen kann, so etwas zu tun.

  • 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

1643040066 402 Lassen Sie die Menuleiste beim Scrollen oben fixiert closed
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.

Vollständige Implementierungsdetails finden Sie unter: http://jsfiddle.net/adamb/F4BmP/

  • 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

1643040066 1 Lassen Sie die Menuleiste beim Scrollen oben fixiert closed
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.

    – adam

    7. November 12 um 18:50 Uhr


versuchen Sie es mit dem Sticky JQuery-Plugin

https://github.com/garand/sticky

<script src="https://stackoverflow.com/questions/13274592/jquery.js"></script>
<script src="jquery.sticky.js"></script>
<script>
  $(document).ready(function(){
    $("#sticker").sticky({topSpacing:0});
  });
</script>

1643040067 462 Lassen Sie die Menuleiste beim Scrollen oben fixiert closed
Atmane

Vielleicht möchten Sie hinzufügen:

 $(window).trigger('scroll') 

um das Scroll-Ereignis auszulösen, wenn Sie eine bereits gescrollte Seite erneut laden. Andernfalls könnten Sie Ihr Menü aus der Position bringen.

$(document).ready(function(){
        $(window).trigger('scroll');
        $(window).bind('scroll', function () {
            var pixels = 600; //number of pixels before modifying styles
            if ($(window).scrollTop() > pixels) {
                $('header').addClass('fixed');
            } else {
                $('header').removeClass('fixed');
            }
        }); 
}); 

Lassen Sie die Menuleiste beim Scrollen oben fixiert closed
bummi

Überprüfen Sie den Link unten, er enthält HTML, CSS, JS und eine Live-Demo 🙂 Viel Spaß

http://codepen.io/senff/pen/ayGvD

// 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');
  }
}
* {font-family:arial; margin:0; padding:0;}
.logo {font-size:40px; font-weight:bold;color:#00a; font-style:italic;}
.intro {color:#777; font-style:italic; margin:10px 0;}
.menu {background:#00a; color:#fff; height:40px; line-height:40px;letter-spacing:1px; width:100%;}
.content {margin-top:10px;}
.menu-padding {padding-top:40px;}
.content {padding:10px;}
.content p {margin-bottom:20px;}
<div class="intro">Some tagline goes here</div>

  • Das sieht viel komplizierter aus, als es sein muss.

    – Jake Wilson

    5. Oktober 16 um 16:11 Uhr

.

620150cookie-checkLassen Sie die Menüleiste beim Scrollen oben fixiert [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy