navbar.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. const updateNavBar = () => {
  2. const topNavbar = document.getElementById('top-navbar')
  3. const navbarToggler = document.getElementById('navbar-toggler')
  4. const themeIcon = document.getElementById('navbar-theme-icon-svg')
  5. if (window.scrollY > 40) {
  6. topNavbar?.classList.remove('transparent-navbar')
  7. topNavbar?.classList.add('shadow')
  8. navbarToggler?.classList.remove('navbar-dark')
  9. navbarToggler?.classList.add('navbar-light')
  10. // color theme selector a.k.a. dark mode
  11. themeIcon?.classList.remove('svg-inverted')
  12. // get the main logo from hidden img tag
  13. const mainLogo = document.getElementById('main-logo')
  14. if (mainLogo) {
  15. const logoURL = mainLogo.getAttribute('src')
  16. document.getElementById('logo')?.setAttribute('src', logoURL)
  17. }
  18. } else {
  19. topNavbar?.classList.remove('shadow')
  20. topNavbar?.classList.add('transparent-navbar')
  21. navbarToggler?.classList.remove('navbar-light')
  22. navbarToggler?.classList.add('navbar-dark')
  23. // color theme selector a.k.a. dark mode
  24. themeIcon?.classList.add('svg-inverted')
  25. // get the inverted logo from hidden img tag
  26. const invertedLogo = document.getElementById('inverted-logo')
  27. if (invertedLogo) {
  28. const logoURL = invertedLogo.getAttribute('src')
  29. document.getElementById('logo')?.setAttribute('src', logoURL)
  30. }
  31. }
  32. }
  33. document.addEventListener('DOMContentLoaded', function () {
  34. // change navbar style on scroll
  35. // ==================================================
  36. // When the user scrolls down 80px from the top of the document,
  37. // resize the navbar's padding and the logo's font size
  38. const topNavbar = document.getElementById('top-navbar')
  39. if (topNavbar?.classList.contains('homepage')) {
  40. document.addEventListener('scroll', updateNavBar)
  41. updateNavBar()
  42. }
  43. // Creates a click handler to collapse the navigation when
  44. // anchors in the mobile nav pop up are clicked
  45. const navMain = document.getElementsByClassName('navbar-collapse')
  46. Array.from(navMain).forEach(function (el) {
  47. el.addEventListener('click', function (e) {
  48. if (e.target.tagName === 'A' && !e.target.classList.contains("dropdown-toggle")) {
  49. el.classList.add('collapse')
  50. el.classList.remove('show')
  51. }
  52. })
  53. })
  54. })