/** * Utils */ // Throttle // const throttle = (callback, limit) => { let timeoutHandler = null; return () => { if (timeoutHandler == null) { timeoutHandler = setTimeout(() => { callback(); timeoutHandler = null; }, limit); } }; }; // addEventListener Helper // const listen = (ele, e, callback) => { if (document.querySelector(ele) !== null) { document.querySelector(ele).addEventListener(e, callback); } } /** * Functions */ // Auto Hide Header // let header = document.getElementById('site-header'); let lastScrollPosition = window.pageYOffset; const autoHideHeader = () => { let currentScrollPosition = window.pageYOffset; if (currentScrollPosition > lastScrollPosition) { header.classList.remove('slideInUp'); header.classList.add('slideOutDown'); } else { header.classList.remove('slideOutDown'); header.classList.add('slideInUp'); } lastScrollPosition = currentScrollPosition; } // Mobile Menu Toggle // let mobileMenuVisible = false; const toggleMobileMenu = () => { let mobileMenu = document.getElementById('mobile-menu'); if (mobileMenuVisible == false) { mobileMenu.style.animationName = 'bounceInRight'; mobileMenu.style.webkitAnimationName = 'bounceInRight'; mobileMenu.style.display = 'block'; mobileMenuVisible = true; } else { mobileMenu.style.animationName = 'bounceOutRight'; mobileMenu.style.webkitAnimationName = 'bounceOutRight' mobileMenuVisible = false; } } // Featured Image Toggle // const showImg = () => { document.querySelector('.bg-img').classList.add('show-bg-img'); } const hideImg = () => { document.querySelector('.bg-img').classList.remove('show-bg-img'); } // ToC Toggle // const toggleToc = () => { document.getElementById('toc').classList.toggle('show-toc'); } if (header !== null) { listen('#menu-btn', "click", toggleMobileMenu); listen('#toc-btn', "click", toggleToc); listen('#img-btn', "click", showImg); listen('.bg-img', "click", hideImg); window.addEventListener('scroll', throttle(() => { autoHideHeader(); if (mobileMenuVisible == true) { toggleMobileMenu(); } }, 250)); }