2015-07-06 5 views
12

ich eine Navigationsleiste erstellen möchten, wie die Seite ähnlich gescrollt ändert sich bis auf die, die sie auf techcrunch.comWie erstellt man eine Kopfzeile, die sich beim Scrollen der Seite ändert?

habe ich nicht nur ein klebriges Header machen wollen, die oben bleibt, weiß ich, wie zu tun das in CSS. Aber ich möchte auch seine Höhe und das Styling von Objekten ändern, die darin eingebettet sind, nachdem ich zu einem bestimmten Punkt gescrollt habe.

Ich habe bereits einige Nachforschungen angestellt und die meisten Leute sagen, es sollte mit einer .scroll-Funktion oder so etwas in jQuery gemacht werden, aber ich habe keine vollständige Erklärung dafür gefunden. Ich bin nicht sehr vertraut mit jQuery oder Javascript um ehrlich zu sein.

Alle Antworten, die ich für ähnliche Fragen gefunden habe, erlauben es mir nicht, den verschachtelten Inhalt innerhalb der Kopfzeile zu bearbeiten oder zu ändern, sondern nur das Aussehen der Kopfzeile. Ich wäre dankbar, wenn jemand den Prozess für mich in einigen Details erklären kann. Ich möchte wirklich lernen, wie man es tun kann, nicht nur etwas Code kopieren und in meine Website einfügen.

Antwort

7

Hier ist eine generische Lösung.

Hierbei handelt es sich um mehrere Header (die einen völlig unterschiedlichen Inhalt haben können), von denen Sie abhängig von der Bildlaufposition selektiv einen anzeigen. Jedes Kopfzeilenelement verfügt über ein data-visible-range-Attribut, das die minimalen und maximalen Bildlaufpositionen definiert, wenn es angezeigt werden soll.

Demo: http://jsfiddle.net/cydfh2s6/1/

HTML

<div class="header header-1" data-visible-range="0-100">Header 1</div> 
<div class="header header-2" data-visible-range="101-500">Header 2</div> 
<div class="header header-3" data-visible-range="501-">Header 3</div> 
<div class="body">BODY</div> 

CSS

.header { 
    position: fixed; 
    top: 0; 
    left: 0; 
    width: 100%; 
    display: none; 
} 
.header-1 { 
    background-color: yellow; 
    display: block; /* header 1 is visible by default */ 
} 
.header-2 { 
    background-color: red; 
} 
.header-3 { 
    background-color: green; 
} 
.body { 
    padding-top: 50px; 
    height: 2000px; 
} 

JS

$(window).scroll(function() { 
    var scrollTop = $(this).scrollTop(); 
    var headerToDisplay = false; 
    $('.header[data-visible-range]').each(function() { 
     var range = $(this).data('visible-range').split('-'); 
     range[0] = range[0] ? parseInt(range[0], 10) : 0; 
     range[1] = range[1] ? parseInt(range[1], 10) : $(document).height(); 
     if(scrollTop >= range[0] && scrollTop <= range[1]) { 
      headerToDisplay = $(this); 
      return false; 
     } 
    }); 
    if(headerToDisplay && !headerToDisplay.is(':visible')) { 
     $('.header[data-visible-range]').hide(); 
     headerToDisplay.show(); 
    } 
}); 
+0

Es funktioniert wie Magie! Wenn ich zwei separate Header habe, wird es für mich viel einfacher, wenn ich den Inhalt in ihnen ändere. Ich danke dir sehr!! – Ramy

5

In diesem Beispiel i Klasse Hinzufügen bin auf scroll

dieses Beispiel Siehe: http://jsfiddle.net/kevalbhatt18/twn3gs75/

hören können wir Scroll-Ereignis wie dem Klicken hören, so, wenn Sie es bewegen gehen in $(window).scroll(function() { ----Call---- }); Jetzt in dieser Funktion() {} wird prüfen, wie viel es 1 oder 2 oder 3 scrollte ... usw. so abhängig davon, dass Bedingung in meinem Code gelten, ich überprüft, wenn Benutzer scrollte> 1, wenden Sie dann css an.

$(window).scroll(function() { 
if ($(this).scrollTop() > 1){ 
    $('header').addClass("sticky"); 
    } 
    else{ 
    $('header').removeClass("sticky"); 
    } 
}); 
+0

Das ist eine sehr einfache Technik, die wirklich sehr gut funktioniert. Danke vielmals! – Ramy

+0

@Ramy Sie kow, wie man Antwort akzeptiert? Wenn nein dann siehe diesen Link: D http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

+0

oh okay!Ich bin neu hier: D Die erste Antwort war viel näher an dem, was ich tbh suche. Leider scheint es, als ob ich nur eine Antwort akzeptieren kann, aber ich weiß deine Hilfe sehr zu schätzen. Danke noch einmal! :) – Ramy

Verwandte Themen