/* * Hide Header on scroll down */ $(function() { const $searchInput = $("#search-input"); const delta = ScrollHelper.getTopbarHeight(); let didScroll; let lastScrollTop = 0; function hasScrolled() { let st = $(this).scrollTop(); /* Make sure they scroll more than delta */ if (Math.abs(lastScrollTop - st) <= delta) { return; } if (st > lastScrollTop ) { // Scroll Down ScrollHelper.hideTopbar(); if ($searchInput.is(":focus")) { $searchInput.blur(); /* remove focus */ } } else { // Scroll up // has not yet scrolled to the bottom of the screen, that is, there is still space for scrolling if (st + $(window).height() < $(document).height()) { if (ScrollHelper.hasScrollUpTask()) { return; } if (ScrollHelper.topbarLocked()) { // avoid redundant scroll up event from smooth scrolling ScrollHelper.unlockTopbar(); } else { if (ScrollHelper.orientationLocked()) { // avoid device auto scroll up on orientation change ScrollHelper.unLockOrientation(); } else { ScrollHelper.showTopbar(); } } } } lastScrollTop = st; } // hasScrolled() function handleLandscape() { if ($(window).scrollTop() === 0) { return; } ScrollHelper.lockOrientation(); ScrollHelper.hideTopbar(); } if (screen.orientation) { screen.orientation.onchange = () => { const type = screen.orientation.type; if (type === "landscape-primary" || type === "landscape-secondary") { handleLandscape(); } }; } else { // for the browsers that not support `window.screen.orientation` API $(window).on("orientationchange",() => { if ($(window).width() < $(window).height()) { // before rotating, it is still in portrait mode. handleLandscape(); } }); } $(window).scroll(() => { if (didScroll) { return; } didScroll = true; }); setInterval(() => { if (didScroll) { hasScrolled(); didScroll = false; } }, 250); });