-
-
Save oooh-boi/80e78f98fb1c0cd48c56a0a414d934b3 to your computer and use it in GitHub Desktop.
| <script> | |
| "use strict"; | |
| OB_ready(OB_doWhenReady); | |
| function OB_doWhenReady() { | |
| // localize everything | |
| var ooohBoi = window.ooohBoi || {}; | |
| // local scope variables | |
| ooohBoi.prev_scroll_pos = window.scrollY || document.body.scrollTop; | |
| ooohBoi.cur_scroll_pos; | |
| ooohBoi.scroll_direction = 'init'; | |
| ooohBoi.prev_scroll_direction = 0; | |
| ooohBoi.header = document.querySelector('#show-hide-header'); // header ID | |
| ooohBoi.header_pos = { | |
| top: ooohBoi.header.offsetTop, | |
| left: ooohBoi.header.offsetLeft, | |
| }; | |
| ooohBoi.header_height = OB_outerHeight(ooohBoi.header); | |
| // show-hide header with ease/transition | |
| ooohBoi.header.style.transition = 'all 0.3s ease'; | |
| // update header height on window resize | |
| ooohBoi.updateHeaderHeight = function() { | |
| ooohBoi.header_height = OB_outerHeight(ooohBoi.header); | |
| } | |
| // listen "scroll" event and decide what to do | |
| ooohBoi.checkScroll = function() { | |
| ooohBoi.cur_scroll_pos = window.scrollY || document.body.scrollTop; | |
| if (ooohBoi.cur_scroll_pos > ooohBoi.prev_scroll_pos) ooohBoi.scroll_direction = 'down'; | |
| else if (ooohBoi.cur_scroll_pos < ooohBoi.prev_scroll_pos) ooohBoi.scroll_direction = 'up'; | |
| if (ooohBoi.scroll_direction !== ooohBoi.prev_scroll_direction) ooohBoi.toggleHeader(ooohBoi.scroll_direction, ooohBoi.cur_scroll_pos); | |
| ooohBoi.prev_scroll_pos = ooohBoi.cur_scroll_pos; | |
| } | |
| // add or remove class based on the scrolling direction | |
| ooohBoi.toggleHeader = function(scroll_direction, scroll_current) { | |
| if (scroll_direction === 'down' && scroll_current > ooohBoi.header_height) { | |
| OB_addClass(ooohBoi.header, 'im-hidden'); // for styling | |
| ooohBoi.header.style.top = -1 * ooohBoi.header_height + "px"; | |
| ooohBoi.prev_scroll_direction = scroll_direction; | |
| } else if (scroll_direction === 'up') { | |
| OB_removeClass(ooohBoi.header, 'im-hidden'); | |
| ooohBoi.header.style.top = ooohBoi.header_pos.top + "px"; | |
| ooohBoi.prev_scroll_direction = scroll_direction; | |
| } | |
| } | |
| // listen "scroll" and "resize" window events | |
| window.addEventListener('scroll', ooohBoi.checkScroll); | |
| window.addEventListener('resize', ooohBoi.updateHeaderHeight); | |
| } | |
| function OB_outerHeight(el) { | |
| var height = el.offsetHeight; | |
| var style = getComputedStyle(el); | |
| height += parseInt(style.marginTop) + parseInt(style.marginBottom); | |
| return height; | |
| } | |
| function OB_addClass(el, className) { | |
| if (el.classList) el.classList.add(className); | |
| else { | |
| var current = el.className, | |
| found = false; | |
| var all = current.split(' '); | |
| for (var i = 0; i < all.length, !found; i++) found = all[i] === className; | |
| if (!found) { | |
| if (current === '') el.className = className; | |
| else el.className += ' ' + className; | |
| } | |
| } | |
| } | |
| function OB_removeClass(el, className) { | |
| if (el.classList) el.classList.remove(className); | |
| else el.className = el.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' '); | |
| } | |
| function OB_ready(fn) { | |
| if (document.readyState != 'loading') fn(); | |
| else if (document.addEventListener) document.addEventListener('DOMContentLoaded', fn); | |
| else { | |
| document.attachEvent('onreadystatechange', function() { | |
| if (document.readyState != 'loading') fn(); | |
| }); | |
| } | |
| } | |
| </script> |
Hi, Thank you for the code but it shows server error 403. While updating the page after pasting this code in the HTML element. Any solutions? I don't have any security plugins activated.
Works perfectly, thank you so much
Thanks bro
thank you a lot....
Hi There,
I really like the show hide header and I have used it before. However, I have just tried to implement it on a new site and it works fine on desktop but not on mobile (iPhone). Any suggestions
It is on overland-europe.com/de/
Thanks for your help.
Thanks sir
Thank you so much! It's work!
Hi,
First thank for the video and code.
I've applied it to Latittudes.com ( https://www.latittudes.com/ ) , but when i scroll up the header doesn't scroll down to initial position.
Thanks for your help.
Great code, works really well. Except for one bug: when resizing the browser width to a smaller size and then back to a larger size, the header width stays at the small size and doesn't resize back to the larger width.
Thank you soo much!