youtube app

// Constants for DOM elements const dropdownTriggers = document.querySelectorAll('.dz-menu-item.dropdown'); const dropdownContent = document.querySelector('.dz-dropdown-content'); const dropdownPanels = document.querySelectorAll('.dz-dropdown-panel'); const header = document.querySelector('.dz-header-wrap');// State to track the currently open menu item element let activeDropdownElement = null; let closeTimer = null; // Timer for delayed closing// Function to close all dropdowns function closeAllDropdowns() { if (closeTimer) { clearTimeout(closeTimer); closeTimer = null; } // Only proceed if the elements exist if (dropdownContent) { dropdownContent.classList.remove('open'); } dropdownPanels.forEach(panel => panel.classList.remove('active')); dropdownTriggers.forEach(item => item.classList.remove('active')); activeDropdownElement = null; }// Function to open a specific dropdown function openDropdown(item, targetPanel) { if (closeTimer) { clearTimeout(closeTimer); closeTimer = null; } // 1. Close all others closeAllDropdowns(); // 2. Open the new one item.classList.add('active'); targetPanel.classList.add('active'); if (dropdownContent) { dropdownContent.classList.add('open'); } activeDropdownElement = item; }// Event listener for each dropdown menu item dropdownTriggers.forEach(item => { item.addEventListener('click', function(e) { e.preventDefault(); const panelName = this.getAttribute('data-panel'); const targetPanel = document.querySelector(`.${panelName}`); if (!targetPanel) return;const isCurrentlyActive = this === activeDropdownElement;if (isCurrentlyActive) { // If the same dropdown is clicked, close it immediately. closeAllDropdowns(); } else { // Open the new dropdown openDropdown(this, targetPanel); } }); });/* --- MOUSE EVENTS FOR STABILITY FIX --- */ if (header) { // 1. When the mouse leaves the entire header area (menu + dropdown bar), start a timer to close it. header.addEventListener('mouseleave', () => { // Only initiate close if a dropdown is currently active if (activeDropdownElement) { // Set a delay (e.g., 300ms) to allow the user to move the mouse slightly closeTimer = setTimeout(closeAllDropdowns, 300); } });// 2. If the mouse re-enters the header area before the timer fires, cancel the close. header.addEventListener('mouseenter', () => { if (closeTimer) { clearTimeout(closeTimer); closeTimer = null; } }); }// 3. Close when clicking anywhere outside the header (as a fallback) document.addEventListener('click', (e) => { // Check if header exists and if the click is outside the header AND a dropdown is open if (header && !header.contains(e.target) && activeDropdownElement) { closeAllDropdowns(); } });// Initial setup: ensure all are closed on load document.addEventListener('DOMContentLoaded', closeAllDropdowns); window.addEventListener('load', closeAllDropdowns);
Scroll to Top