2013-04-09 14 views
5

Proszę zaznaczyć to JPG uwagę na odniesienie:Jquery lepki nav podczas przewijania w górę

enter image description here

Mam pasek nawigacyjny, który pojawia się w górnej części strony. Zachowanie, którego szukam, to: Kiedy przewijasz w górę, ten sam pasek nawigacji znika i jest ustawiony na górze ekranu.

Kod, którego tu używam działa, z tym, że nie jestem pewien, jak ustawić regułę, która powstrzymuje nawigację od przyklejania się do górnej części ekranu po przewinięciu do domyślnej pozycji. Obecnie, za pomocą poniższego kodu, nawigacja pozostaje na górze, nawet po przewinięciu do góry strony.

function() { 
var previousScroll = 0; 

$(window).scroll(function(){ 
    var currentScroll = $(this).scrollTop(); 
    if (currentScroll > previousScroll){ 
     $('#header').fadeOut(); 
    } else { 
     $('#header').fadeIn(); 
     $('#header').addClass('fixed'); 
    } 
    previousScroll = currentScroll; 
}); 

A mój CSS:

.fixed { 
    position: fixed; 
    top: 0; 
} 
+0

Po prostu zaniknąć, gdy scrollTop ma wartość 0? Czy też czegoś tu brakuje? – xec

+0

Zasadniczo chcę zmodyfikować kod, aby usunąć "ustaloną" klasę, gdy użytkownik przewinie z powrotem do domyślnej pozycji nav. – thejerkstore

+0

czy naprawdę chcesz, żeby się rozkwitł? czy chcesz, żeby wyglądało jak przewija się do widoku? sprawdź www.bananasnballs.com dla tego ostatniego przykładu. – ntgCleaner

Odpowiedz

0

Spróbuj tego. Może trzeba zmienić #headerwidth w zależności również od struktury

var hdr = $('#header'); 

var off = {top: 150} //hdr.offset(); 

$(window).scroll(function(){ 
    if($(this).scrollTop() >= off.top) 
     hdr.fadeIn('fast').css({position :'fixed', top: 0, left: 0}); 
    else 
     hdr.fadeOut('fast') 
}) 
3

będzie trzeba zadeklarować dodatkową zmienną nagranie oryginalne pionowe przesunięcie elementu #header. Ponieważ wartość ta ulegnie zmianie, gdy Zdarzenie przewijania (jako stałej pozycji zresetuje offset na 0), deklarujemy go o jeden poziom wyżej w przypadku przewijania:

$(document).ready(function() { 
    var previousScroll = 0, 
     headerOrgOffset = $('#header').offset().top; 

    $(window).scroll(function() { 
     var currentScroll = $(this).scrollTop(); 
     if(currentScroll > headerOrgOffset) { 
      if (currentScroll > previousScroll) { 
       $('#header').fadeOut(); 
      } else { 
       $('#header').fadeIn(); 
       $('#header').addClass('fixed'); 
      } 
     } else { 
      $('#header').removeClass('fixed'); 
     } 
     previousScroll = currentScroll; 
    }); 

}); 

Zobacz proof of concept skrzypce tutaj - http://jsfiddle.net/teddyrised/6zGx6/

+0

Dzięki Terry. Działa to naprawdę dobrze. Jedyny problem, jaki widzę, to to, że następuje przesunięcie całej treści, gdy nagłówek zniknie. Myślę, że początkowe zanikanie powinno zostać usunięte. – thejerkstore

+0

Wynika to z faktu, że odebrano nagłówek z przepływu dokumentów. Aby to obejść, możesz: (1) powielić element '# header' (uważaj na duplikat ID ... sugeruję użycie klas) i ujawnić/ukryć duplikat po uruchomieniu zdarzenia przewijania, lub (2) przypisać martwą spację do elementu nagłówka - np. przypisać górne dopełnienie, które jest równoważne wysokości nagłówka w elemencie nadrzędnym, lub utworzyć spację sortowania, i ustawić bezwzględnie oryginalny element nagłówka (i tak przełącza się między absolutnym i ustalonym pozycjonowanie). – Terry

+0

@thejerkstore Zaktualizowałem skrzypce - http://jsfiddle.net/teddyrised/6zGx6/ – Terry

Powiązane problemy