Skip to content

Instantly share code, notes, and snippets.

@alexmahan
Last active March 16, 2023 19:52
Show Gist options
  • Save alexmahan/b1ca6da2ee0befe8c986d562481bab71 to your computer and use it in GitHub Desktop.
Save alexmahan/b1ca6da2ee0befe8c986d562481bab71 to your computer and use it in GitHub Desktop.
Simple vanilla JS script for a throttled shy header/nav on scroll
<script>
// sticky/shy header
const header = document.querySelector('.js-header');
const headerHeight = header.offsetHeight;
const headerClass = '-hidden';
let scrollPosition = 0;
let timeout = false;
window.addEventListener('scroll', function() {
if (!timeout) {
window.requestAnimationFrame(function() {
const scrollTop = window.pageYOffset;
let scrollDown = false;
if (scrollTop > scrollPosition) {
scrollDown = true;
} else {
scrollDown = false;
}
scrollPosition = window.scrollY;
animateHeader(scrollPosition, scrollDown);
timeout = false;
});
timeout = true;
}
});
function animateHeader(scrollPos, scrollDownBoolean) {
if ((scrollPos > headerHeight * 2) && scrollDownBoolean) {
header.classList.add(headerClass);
} else {
header.classList.remove(headerClass);
}
}
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment