top-bar.ts 868 B

123456789101112131415161718192021222324252627
  1. export function initTopMenu() {
  2. const subMenus = document.querySelectorAll<HTMLDivElement>('.submenu');
  3. subMenus.forEach(initSubMenu);
  4. }
  5. let close: () => void;
  6. function initSubMenu(subMenu: HTMLDivElement) {
  7. const trigger = subMenu.querySelector('.trigger');
  8. const overlay = subMenu.querySelector('.overlay');
  9. trigger?.addEventListener('click', (e) => {
  10. if (typeof close === 'function') {
  11. close();
  12. }
  13. overlay?.classList.add('expanded');
  14. e.preventDefault();
  15. e.stopPropagation();
  16. close = () => {
  17. overlay?.classList.remove('expanded');
  18. document.removeEventListener('click', close);
  19. document.removeEventListener('scroll', close);
  20. };
  21. document.addEventListener('click', close);
  22. document.addEventListener('scroll', close);
  23. });
  24. }