Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Sticky header que cambie de color solo con scroll up

Estas en el tema de Sticky header que cambie de color solo con scroll up en el foro de Javascript en Foros del Web. Hola amigos, tengo una duda, estoy trabajando con un sticky header muy sencillo en js con .addClass y removeClass y CSS. Mi problemita es el ...
  #1 (permalink)  
Antiguo 04/05/2015, 01:48
Avatar de Ferdinand1945  
Fecha de Ingreso: noviembre-2010
Ubicación: Estocolmo
Mensajes: 62
Antigüedad: 13 años, 5 meses
Puntos: 1
Pregunta Sticky header que cambie de color solo con scroll up

Hola amigos, tengo una duda, estoy trabajando con un sticky header muy sencillo en js con .addClass y removeClass y CSS. Mi problemita es el siguiente, quiero que el sticky header sea gris en el top de la pagina --> con scroll down desaparece --> con scroll up aparece pero en vez de gris, negro --> por ultimo cuando llega al top de la pagina se vuelve gris de nuevo. hasta he logrado que con scroll up se haga negro pero aun no logro que se vuelva gris cuando llega al top de la pagina... me podrian explicar como? les dejo el codigo mas el css para que lo vean y si tienen un tiempito me ayuden cone esta tonteria :)
Gracias a todos!

Código:
// Script para esconder header con scroll down
var didScroll;
var lastScrollTop = 0;
var delta = 5;
var navbarHeight = $('header').outerHeight();

$(window).scroll(function(event){
    didScroll = true;
});

setInterval(function () {
    if (didScroll) {
        hasScrolled();
        didScroll = false;
    }
}, 20);

function hasScrolled() {
    var st = $(this).scrollTop();
    
    // asegurarse que se haga scroll mas que delta
    if (Math.abs(lastScrollTop - st) <= delta) return;
    
    // necesario para no ver lo que haya atras de la nav-bar
    if (st > lastScrollTop && st > navbarHeight){
        // Scroll Down
        $('header').removeClass('nav-down').addClass('nav-up');
    } else {
        // Scroll Up
        if(st + $(window).height() < $(document).height()) {
            $('header').removeClass('nav-up').addClass('nav-down-b');
        }
    }
    
    if (st > lastScrollTop && st > navbarHeight){
        // Scroll Down 
        $('header').removeClass('nav-down-b').addClass('nav-up');
    }
    else {
        // Scroll Up (este ultimo estoy muy inseguro)
        if(st >= $(document).height()) {
            $('header').removeClass('nav-down-b').addClass('nav-down');
        }
    }
    
    lastScrollTop = st;
}
El CSS se basa en 4 clases

Código:
header {
 position: fixed;
 top: 0;
 transition: top 0.2s ease-in-out;
 width: 100%;
 height: 55px;
 background-color: #1c1a1b;
 z-index: 3;
 margin-bottom: 42px;
}
Código:
.nav-up {
 top: -55px; background-color: #eee;
}
 .nav-down {top:0px; background-color: #eee;}

 .nav-down-b {top:0px; background-color: #1c1a1b;}
Asi se ve el html:

Código HTML:
<header class="nav-down clearfix"> 

      <div class="container">
          <div class="pull-left logo-neg"><img src="/images/PW-emblem-neg.png"></div>
        <ul id="user-menu" class="pull-right">
          <li><a href="/customer-service"><img src="/images/Icon_Nav_Magnify.svg" alt="glass"></a></li>
          <li><a href="/customer-service"><img src="/images/Icon_Nav_Cart.svg" alt="cart"> </a></li>
          <li><a href="/customer-service"><img src="/images/Icon_Nav_Info.svg" alt="info"> </a></li>
          <li><a href="/customer-service"><img src="/images/Icon_Nav_Heart.svg" alt="favorits"> </a></li>
        </ul>
      </div>
    </header> 

Espero me puedan ayudar! Gracias de antemano a todos!!

Última edición por Ferdinand1945; 04/05/2015 a las 02:07 Razón: error tipografico
  #2 (permalink)  
Antiguo 04/05/2015, 06:34
Avatar de Ferdinand1945  
Fecha de Ingreso: noviembre-2010
Ubicación: Estocolmo
Mensajes: 62
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Sticky header que cambie de color solo con scroll up

Hola! Para el que lo necesite, despues de un par de horas probando y probando encontre la tonteria... estaba llamando mal a la variable final que era delta:

Cita:
// Hide Header on on scroll down
var didScroll;
var lastScrollTop = 0;
var delta = 5;
var navbarHeight = $('header').outerHeight();

$(window).scroll(function(event){
didScroll = true;
});

setInterval(function () {
if (didScroll) {
hasScrolled();
didScroll = false;
}
}, 20);

function hasScrolled() {
var st = $(this).scrollTop();

// Make sure they scroll more than delta
if (Math.abs(lastScrollTop - st) <= delta) return;

// If they scrolled down and are past the navbar, add class .nav-up.
// This is necessary so you never see what is "behind" the navbar.
if (st > lastScrollTop && st > navbarHeight){
// Scroll Down
$('header').removeClass('nav-down').addClass('nav-up');
} else {
// Scroll Up
if(st < $(document).height()) {
$('header').removeClass('nav-up').addClass('nav-down-b');
}
}

if (st < delta){
// Scroll Down
$('header').removeClass('nav-down-b').addClass('nav-down');
}


lastScrollTop = st;
}
este es el codigo funcionando para ese efecto que yo buscaba con las respectivas clases que escribi arriba...

Etiquetas: css, header, javascript+html, javascript-function
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:28.