Hide header on scroll down, show on scroll up
by ian_smithz
HTML
<header>
<h1>LOGO</h1>
</header>
<ul class="mainmenu">
<li>Home</li>
<li>Menu</li>
<li>Blog</li>
<li>Privacy</li>
<li>Contact</li>
</ul>
<main>
This is your body.
</main>
<footer>
This is your footer.
</footer>
CSS
body {
padding-top: 40px;
}
header{ height:100px; text-align:center;}
h1{color:#222;font-size: 45px;}
/* Sticky */
.mainmenu {
background: #222;
height: 200px;
padding: 0 15px;
width: 100%;
margin: 0 auto;
}
.nav-down{
position: fixed;
top: 0;
transition: top 0.2s ease-in-out;
width: 100%;
}
.nav-up {
top: -200px;
}
.mainmenu{text-align: center;}
.mainmenu li{display: inline-block; color: #fff;font-size: 12px; line-height: 50px;text-transform: uppercase;margin-right:10px;}
main {
height: 2000px;
}
footer { background: #222;}
* { color: transparent}
JavaScript
$(window).bind('scroll', function () {
if ($(window).scrollTop() > 150)
$('.mainmenu').addClass('nav-down');
else
$('.mainmenu').removeClass('nav-down');
});
// Hide Header on on scroll down
var lastScrollTop = 0;
var delta = 5;
var navbarHeight = $('.mainmenu').outerHeight();
$(window).scroll(function(event){
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
$('.mainmenu').removeClass('nav-down').addClass('nav-up');
} else {
// Scroll Up
if(st + $(window).height() < $(document).height()) {
$('.mainmenu').removeClass('nav-up');
}
}
lastScrollTop = st;
});