Droid4X is a powerful Android emulator that allows you to run Android apps and games on your PC or Mac. […]
// 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);