<div class="multi-dropdown-demo">
<div class="demo-content">
<h2>Multi-Level Dropdown Menu Demo</h2>
<p>A comprehensive navigation system with multiple levels of dropdown menus, smooth animations, and full keyboard accessibility. Perfect for complex websites with deep content hierarchies.</p>
<div class="demo-controls">
<h3>Menu Options:</h3>
<div class="control-buttons">
<button class="control-btn active" data-theme="default">Default</button>
<button class="control-btn" data-theme="dark">Dark</button>
<button class="control-btn" data-theme="minimal">Minimal</button>
<button class="control-btn" data-theme="colorful">Colorful</button>
</div>
</div>
</div>
<div class="menu-container">
<nav class="multi-dropdown-nav default-theme" role="navigation" aria-label="Main navigation">
<div class="nav-brand">
<span class="brand-icon">π</span>
<span class="brand-text">NavDemo</span>
</div>
<ul class="nav-menu" role="menubar">
<li class="nav-item" role="none">
<a href="#" class="nav-link" role="menuitem" aria-haspopup="false">Home</a>
</li>
<li class="nav-item has-dropdown" role="none">
<a href="#" class="nav-link" role="menuitem" aria-haspopup="true" aria-expanded="false">
Products
<span class="dropdown-icon">βΌ</span>
</a>
<ul class="dropdown-menu" role="menu" aria-label="Products submenu">
<li class="dropdown-item has-submenu" role="none">
<a href="#" class="dropdown-link" role="menuitem" aria-haspopup="true" aria-expanded="false">
Web Development
<span class="submenu-icon">βΆ</span>
</a>
<ul class="submenu" role="menu" aria-label="Web Development submenu">
<li role="none">
<a href="#" class="submenu-link" role="menuitem">
<span class="item-icon">π</span>
Frontend Frameworks
</a>
</li>
<li role="none">
<a href="#" class="submenu-link" role="menuitem">
<span class="item-icon">βοΈ</span>
Backend Solutions
</a>
</li>
<li role="none">
<a href="#" class="submenu-link" role="menuitem">
<span class="item-icon">π±</span>
Mobile Development
</a>
</li>
<li role="none">
<a href="#" class="submenu-link" role="menuitem">
<span class="item-icon">π§</span>
Development Tools
</a>
</li>
</ul>
</li>
<li class="dropdown-item has-submenu" role="none">
<a href="#" class="dropdown-link" role="menuitem" aria-haspopup="true" aria-expanded="false">
Design Services
<span class="submenu-icon">βΆ</span>
</a>
<ul class="submenu" role="menu" aria-label="Design Services submenu">
<li role="none">
<a href="#" class="submenu-link" role="menuitem">
<span class="item-icon">π¨</span>
UI/UX Design
</a>
</li>
<li role="none">
<a href="#" class="submenu-link" role="menuitem">
<span class="item-icon">πΌοΈ</span>
Graphic Design
</a>
</li>
<li role="none">
<a href="#" class="submenu-link" role="menuitem">
<span class="item-icon">π</span>
Prototyping
</a>
</li>
<li role="none">
<a href="#" class="submenu-link" role="menuitem">
<span class="item-icon">π</span>
Brand Identity
</a>
</li>
</ul>
</li>
<li class="dropdown-item" role="none">
<a href="#" class="dropdown-link" role="menuitem">
<span class="item-icon">βοΈ</span>
Cloud Solutions
</a>
</li>
<li class="dropdown-item" role="none">
<a href="#" class="dropdown-link" role="menuitem">
<span class="item-icon">π</span>
Security Services
</a>
</li>
</ul>
</li>
<li class="nav-item has-dropdown" role="none">
<a href="#" class="nav-link" role="menuitem" aria-haspopup="true" aria-expanded="false">
Solutions
<span class="dropdown-icon">βΌ</span>
</a>
<ul class="dropdown-menu" role="menu" aria-label="Solutions submenu">
<li class="dropdown-item has-submenu" role="none">
<a href="#" class="dropdown-link" role="menuitem" aria-haspopup="true" aria-expanded="false">
Enterprise
<span class="submenu-icon">βΆ</span>
</a>
<ul class="submenu" role="menu" aria-label="Enterprise submenu">
<li role="none">
<a href="#" class="submenu-link" role="menuitem">
<span class="item-icon">π’</span>
Large Scale Systems
</a>
</li>
<li role="none">
<a href="#" class="submenu-link" role="menuitem">
<span class="item-icon">π</span>
Analytics Platform
</a>
</li>
<li role="none">
<a href="#" class="submenu-link" role="menuitem">
<span class="item-icon">π</span>
Security Framework
</a>
</li>
</ul>
</li>
<li class="dropdown-item has-submenu" role="none">
<a href="#" class="dropdown-link" role="menuitem" aria-haspopup="true" aria-expanded="false">
Small Business
<span class="submenu-icon">βΆ</span>
</a>
<ul class="submenu" role="menu" aria-label="Small Business submenu">
<li role="none">
<a href="#" class="submenu-link" role="menuitem">
<span class="item-icon">πͺ</span>
Starter Packages
</a>
</li>
<li role="none">
<a href="#" class="submenu-link" role="menuitem">
<span class="item-icon">πΌ</span>
Business Tools
</a>
</li>
<li role="none">
<a href="#" class="submenu-link" role="menuitem">
<span class="item-icon">π</span>
Growth Solutions
</a>
</li>
</ul>
</li>
<li class="dropdown-item" role="none">
<a href="#" class="dropdown-link" role="menuitem">
<span class="item-icon">π</span>
Educational
</a>
</li>
</ul>
</li>
<li class="nav-item has-dropdown" role="none">
<a href="#" class="nav-link" role="menuitem" aria-haspopup="true" aria-expanded="false">
Resources
<span class="dropdown-icon">βΌ</span>
</a>
<ul class="dropdown-menu" role="menu" aria-label="Resources submenu">
<li class="dropdown-item" role="none">
<a href="#" class="dropdown-link" role="menuitem">
<span class="item-icon">π</span>
Documentation
</a>
</li>
<li class="dropdown-item" role="none">
<a href="#" class="dropdown-link" role="menuitem">
<span class="item-icon">π₯</span>
Video Tutorials
</a>
</li>
<li class="dropdown-item" role="none">
<a href="#" class="dropdown-link" role="menuitem">
<span class="item-icon">π¬</span>
Community Forum
</a>
</li>
<li class="dropdown-item" role="none">
<a href="#" class="dropdown-link" role="menuitem">
<span class="item-icon">π</span>
Blog
</a>
</li>
</ul>
</li>
<li class="nav-item" role="none">
<a href="#" class="nav-link" role="menuitem" aria-haspopup="false">Contact</a>
</li>
</ul>
<div class="nav-toggle" aria-label="Toggle navigation menu" role="button" tabindex="0">
<span class="hamburger-line"></span>
<span class="hamburger-line"></span>
<span class="hamburger-line"></span>
</div>
</nav>
<div class="menu-info">
<div class="info-item">
<span class="info-label">Theme:</span>
<span class="info-value" id="currentTheme">Default</span>
</div>
<div class="info-item">
<span class="info-label">Active Menu:</span>
<span class="info-value" id="activeMenu">None</span>
</div>
<div class="info-item">
<span class="info-label">Menu Depth:</span>
<span class="info-value" id="menuDepth">0</span>
</div>
</div>
</div>
</div>
.multi-dropdown-demo {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 380px;
border-radius: 16px;
padding: 30px;
color: white;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
}
.demo-content {
text-align: center;
margin-bottom: 30px;
}
.demo-content h2 {
margin: 0 0 12px 0;
font-size: 24px;
font-weight: 700;
}
.demo-content p {
margin: 0 0 20px 0;
opacity: 0.9;
line-height: 1.6;
}
.demo-controls h3 {
margin: 0 0 12px 0;
font-size: 16px;
font-weight: 600;
}
.control-buttons {
display: flex;
gap: 8px;
justify-content: center;
flex-wrap: wrap;
}
.control-btn {
padding: 6px 12px;
background: rgba(255, 255, 255, 0.2);
border: 1px solid rgba(255, 255, 255, 0.3);
border-radius: 6px;
color: white;
font-size: 12px;
cursor: pointer;
transition: all 0.3s ease;
}
.control-btn:hover,
.control-btn.active {
background: rgba(255, 255, 255, 0.3);
transform: translateY(-1px);
}
.menu-container {
background: white;
border-radius: 12px;
padding: 0;
margin-bottom: 20px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
overflow: hidden;
}
.multi-dropdown-nav {
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 20px;
background: #ffffff;
border-bottom: 1px solid #e5e7eb;
position: relative;
min-height: 60px;
}
.nav-brand {
display: flex;
align-items: center;
gap: 8px;
font-weight: 700;
font-size: 18px;
color: #1f2937;
}
.brand-icon {
font-size: 24px;
}
.nav-menu {
display: flex;
list-style: none;
margin: 0;
padding: 0;
gap: 0;
}
.nav-item {
position: relative;
}
.nav-link {
display: flex;
align-items: center;
gap: 6px;
padding: 20px 16px;
text-decoration: none;
color: #374151;
font-weight: 500;
transition: all 0.3s ease;
border-bottom: 3px solid transparent;
}
.nav-link:hover,
.nav-link:focus {
color: #3b82f6;
background: rgba(59, 130, 246, 0.05);
border-bottom-color: #3b82f6;
}
.dropdown-icon,
.submenu-icon {
font-size: 10px;
transition: transform 0.3s ease;
}
.nav-item.active .dropdown-icon {
transform: rotate(180deg);
}
.dropdown-menu,
.submenu {
position: absolute;
top: 100%;
left: 0;
background: white;
border: 1px solid #e5e7eb;
border-radius: 8px;
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
min-width: 220px;
opacity: 0;
visibility: hidden;
transform: translateY(-10px);
transition: all 0.3s ease;
z-index: 1000;
list-style: none;
margin: 0;
padding: 8px 0;
}
.submenu {
top: 0;
left: 100%;
margin-left: 8px;
}
.nav-item:hover .dropdown-menu,
.nav-item.active .dropdown-menu,
.dropdown-item:hover .submenu,
.dropdown-item.active .submenu {
opacity: 1;
visibility: visible;
transform: translateY(0);
}
.dropdown-item {
position: relative;
}
.dropdown-link,
.submenu-link {
display: flex;
align-items: center;
gap: 8px;
padding: 10px 16px;
text-decoration: none;
color: #374151;
font-size: 14px;
transition: all 0.3s ease;
border-left: 3px solid transparent;
}
.dropdown-link:hover,
.dropdown-link:focus,
.submenu-link:hover,
.submenu-link:focus {
background: rgba(59, 130, 246, 0.05);
color: #3b82f6;
border-left-color: #3b82f6;
}
.item-icon {
font-size: 16px;
width: 20px;
text-align: center;
}
.has-submenu .submenu-icon {
margin-left: auto;
}
.dropdown-item.active .submenu-icon {
transform: rotate(90deg);
}
.nav-toggle {
display: none;
flex-direction: column;
gap: 4px;
cursor: pointer;
padding: 8px;
border-radius: 4px;
transition: background 0.3s ease;
}
.nav-toggle:hover {
background: rgba(59, 130, 246, 0.1);
}
.hamburger-line {
width: 20px;
height: 2px;
background: #374151;
transition: all 0.3s ease;
}
.nav-toggle.active .hamburger-line:nth-child(1) {
transform: rotate(45deg) translate(5px, 5px);
}
.nav-toggle.active .hamburger-line:nth-child(2) {
opacity: 0;
}
.nav-toggle.active .hamburger-line:nth-child(3) {
transform: rotate(-45deg) translate(7px, -6px);
}
.menu-info {
background: rgba(255, 255, 255, 0.1);
border-radius: 8px;
padding: 16px;
display: flex;
gap: 24px;
flex-wrap: wrap;
}
.info-item {
display: flex;
flex-direction: column;
gap: 4px;
}
.info-label {
font-size: 12px;
opacity: 0.8;
font-weight: 500;
}
.info-value {
font-size: 14px;
font-weight: 600;
}
/* Theme Variations */
.multi-dropdown-nav.dark-theme {
background: #1f2937;
border-bottom-color: #374151;
}
.dark-theme .nav-brand,
.dark-theme .nav-link {
color: #f9fafb;
}
.dark-theme .nav-link:hover,
.dark-theme .nav-link:focus {
background: rgba(59, 130, 246, 0.2);
}
.dark-theme .dropdown-menu,
.dark-theme .submenu {
background: #374151;
border-color: #4b5563;
}
.dark-theme .dropdown-link,
.dark-theme .submenu-link {
color: #f9fafb;
}
.dark-theme .dropdown-link:hover,
.dark-theme .dropdown-link:focus,
.dark-theme .submenu-link:hover,
.dark-theme .submenu-link:focus {
background: rgba(59, 130, 246, 0.2);
}
.multi-dropdown-nav.minimal-theme {
background: #f9fafb;
border-bottom: none;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
.minimal-theme .nav-link {
border-radius: 6px;
margin: 0 4px;
}
.minimal-theme .nav-link:hover,
.minimal-theme .nav-link:focus {
background: #e5e7eb;
border-bottom-color: transparent;
}
.multi-dropdown-nav.colorful-theme {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-bottom: none;
}
.colorful-theme .nav-brand,
.colorful-theme .nav-link {
color: white;
}
.colorful-theme .nav-link:hover,
.colorful-theme .nav-link:focus {
background: rgba(255, 255, 255, 0.2);
border-bottom-color: white;
}
.colorful-theme .dropdown-menu,
.colorful-theme .submenu {
background: white;
border: none;
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);
}
/* Mobile Responsive */
@media (max-width: 768px) {
.nav-toggle {
display: flex;
}
.nav-menu {
position: absolute;
top: 100%;
left: 0;
right: 0;
background: white;
flex-direction: column;
border-top: 1px solid #e5e7eb;
opacity: 0;
visibility: hidden;
transform: translateY(-10px);
transition: all 0.3s ease;
z-index: 999;
}
.nav-menu.active {
opacity: 1;
visibility: visible;
transform: translateY(0);
}
.nav-item {
width: 100%;
}
.nav-link {
padding: 16px 20px;
border-bottom: 1px solid #f3f4f6;
border-left: none;
}
.dropdown-menu {
position: static;
opacity: 1;
visibility: visible;
transform: none;
box-shadow: none;
border: none;
border-radius: 0;
background: #f9fafb;
display: none;
}
.nav-item.active .dropdown-menu {
display: block;
}
.submenu {
position: static;
margin-left: 0;
background: #f3f4f6;
display: none;
}
.dropdown-item.active .submenu {
display: block;
}
.dropdown-link,
.submenu-link {
padding-left: 40px;
}
.submenu-link {
padding-left: 60px;
}
.menu-info {
flex-direction: column;
gap: 12px;
}
}
/* Focus styles for accessibility */
.nav-link:focus,
.dropdown-link:focus,
.submenu-link:focus,
.nav-toggle:focus {
outline: 2px solid #3b82f6;
outline-offset: 2px;
}
/* Animation for menu items */
@keyframes slideIn {
from {
opacity: 0;
transform: translateX(-20px);
}
to {
opacity: 1;
transform: translateX(0);
}
}
.dropdown-menu .dropdown-item,
.submenu li {
animation: slideIn 0.3s ease forwards;
}
.dropdown-menu .dropdown-item:nth-child(2) {
animation-delay: 0.1s;
}
.dropdown-menu .dropdown-item:nth-child(3) {
animation-delay: 0.2s;
}
.dropdown-menu .dropdown-item:nth-child(4) {
animation-delay: 0.3s;
}
/* Hover indicator */
.nav-item::before {
content: '';
position: absolute;
bottom: 0;
left: 50%;
width: 0;
height: 3px;
background: #3b82f6;
transition: all 0.3s ease;
transform: translateX(-50%);
}
.nav-item:hover::before {
width: 80%;
}
/* Loading state */
.nav-item.loading {
opacity: 0.6;
pointer-events: none;
}
.nav-item.loading::after {
content: '';
position: absolute;
top: 50%;
right: 8px;
width: 12px;
height: 12px;
border: 1px solid #e5e7eb;
border-top: 1px solid #3b82f6;
border-radius: 50%;
animation: spin 1s linear infinite;
transform: translateY(-50%);
}
@keyframes spin {
0% { transform: translateY(-50%) rotate(0deg); }
100% { transform: translateY(-50%) rotate(360deg); }
}
document.addEventListener('DOMContentLoaded', function() {
const nav = document.querySelector('.multi-dropdown-nav');
const navToggle = document.querySelector('.nav-toggle');
const navMenu = document.querySelector('.nav-menu');
const navItems = document.querySelectorAll('.nav-item');
const dropdownItems = document.querySelectorAll('.dropdown-item');
const controlButtons = document.querySelectorAll('.control-btn');
const currentTheme = document.getElementById('currentTheme');
const activeMenu = document.getElementById('activeMenu');
const menuDepth = document.getElementById('menuDepth');
let currentDepth = 0;
let activeMenuPath = [];
// Initialize multi-level dropdown functionality
function initMultiDropdown() {
// Handle main navigation items
navItems.forEach((item, index) => {
const link = item.querySelector('.nav-link');
const dropdown = item.querySelector('.dropdown-menu');
if (dropdown) {
// Mouse events
item.addEventListener('mouseenter', () => {
openDropdown(item, 1);
});
item.addEventListener('mouseleave', () => {
closeDropdown(item);
});
// Click events for mobile
link.addEventListener('click', (e) => {
if (window.innerWidth <= 768) {
e.preventDefault();
toggleDropdown(item);
}
});
// Keyboard navigation
link.addEventListener('keydown', (e) => {
handleKeyNavigation(e, item, 'nav');
});
}
// Handle regular nav links
link.addEventListener('click', (e) => {
if (!item.classList.contains('has-dropdown')) {
handleNavClick(link.textContent.trim());
}
});
});
// Handle dropdown items
dropdownItems.forEach(item => {
const link = item.querySelector('.dropdown-link');
const submenu = item.querySelector('.submenu');
if (submenu) {
// Mouse events
item.addEventListener('mouseenter', () => {
openSubmenu(item, 2);
});
item.addEventListener('mouseleave', () => {
closeSubmenu(item);
});
// Click events for mobile
link.addEventListener('click', (e) => {
if (window.innerWidth <= 768) {
e.preventDefault();
toggleSubmenu(item);
}
});
// Keyboard navigation
link.addEventListener('keydown', (e) => {
handleKeyNavigation(e, item, 'dropdown');
});
}
// Handle dropdown link clicks
link.addEventListener('click', (e) => {
if (!item.classList.contains('has-submenu')) {
handleMenuClick(link.textContent.trim());
}
});
});
// Handle submenu links
const submenuLinks = document.querySelectorAll('.submenu-link');
submenuLinks.forEach(link => {
link.addEventListener('click', (e) => {
handleMenuClick(link.textContent.trim());
});
link.addEventListener('keydown', (e) => {
handleKeyNavigation(e, link.closest('li'), 'submenu');
});
});
}
// Open dropdown menu
function openDropdown(item, depth) {
closeAllDropdowns();
item.classList.add('active');
item.querySelector('.nav-link').setAttribute('aria-expanded', 'true');
updateMenuInfo(item.querySelector('.nav-link').textContent.trim(), depth);
}
// Close dropdown menu
function closeDropdown(item) {
item.classList.remove('active');
item.querySelector('.nav-link').setAttribute('aria-expanded', 'false');
closeAllSubmenus(item);
updateMenuInfo('None', 0);
}
// Toggle dropdown for mobile
function toggleDropdown(item) {
const isActive = item.classList.contains('active');
closeAllDropdowns();
if (!isActive) {
item.classList.add('active');
item.querySelector('.nav-link').setAttribute('aria-expanded', 'true');
updateMenuInfo(item.querySelector('.nav-link').textContent.trim(), 1);
} else {
updateMenuInfo('None', 0);
}
}
// Open submenu
function openSubmenu(item, depth) {
closeAllSubmenus();
item.classList.add('active');
item.querySelector('.dropdown-link').setAttribute('aria-expanded', 'true');
updateMenuInfo(item.querySelector('.dropdown-link').textContent.trim(), depth);
}
// Close submenu
function closeSubmenu(item) {
item.classList.remove('active');
item.querySelector('.dropdown-link').setAttribute('aria-expanded', 'false');
// Update to parent menu info
const parentNav = item.closest('.nav-item');
if (parentNav) {
updateMenuInfo(parentNav.querySelector('.nav-link').textContent.trim(), 1);
}
}
// Toggle submenu for mobile
function toggleSubmenu(item) {
const isActive = item.classList.contains('active');
closeAllSubmenus();
if (!isActive) {
item.classList.add('active');
item.querySelector('.dropdown-link').setAttribute('aria-expanded', 'true');
updateMenuInfo(item.querySelector('.dropdown-link').textContent.trim(), 2);
} else {
const parentNav = item.closest('.nav-item');
if (parentNav) {
updateMenuInfo(parentNav.querySelector('.nav-link').textContent.trim(), 1);
}
}
}
// Close all dropdowns
function closeAllDropdowns() {
navItems.forEach(item => {
item.classList.remove('active');
const link = item.querySelector('.nav-link');
if (link.hasAttribute('aria-expanded')) {
link.setAttribute('aria-expanded', 'false');
}
});
closeAllSubmenus();
}
// Close all submenus
function closeAllSubmenus(parent = null) {
const items = parent ? parent.querySelectorAll('.dropdown-item') : dropdownItems;
items.forEach(item => {
item.classList.remove('active');
const link = item.querySelector('.dropdown-link');
if (link && link.hasAttribute('aria-expanded')) {
link.setAttribute('aria-expanded', 'false');
}
});
}
// Handle keyboard navigation
function handleKeyNavigation(e, item, type) {
const items = getNavigationItems(type);
const currentIndex = Array.from(items).indexOf(item);
switch(e.key) {
case 'ArrowDown':
e.preventDefault();
const nextItem = items[currentIndex + 1] || items[0];
focusItem(nextItem, type);
break;
case 'ArrowUp':
e.preventDefault();
const prevItem = items[currentIndex - 1] || items[items.length - 1];
focusItem(prevItem, type);
break;
case 'ArrowRight':
e.preventDefault();
if (type === 'nav' && item.classList.contains('has-dropdown')) {
openDropdown(item, 1);
const firstDropdownItem = item.querySelector('.dropdown-item');
if (firstDropdownItem) {
focusItem(firstDropdownItem, 'dropdown');
}
} else if (type === 'dropdown' && item.classList.contains('has-submenu')) {
openSubmenu(item, 2);
const firstSubmenuItem = item.querySelector('.submenu li');
if (firstSubmenuItem) {
focusItem(firstSubmenuItem, 'submenu');
}
}
break;
case 'ArrowLeft':
e.preventDefault();
if (type === 'dropdown') {
const parentNav = item.closest('.nav-item');
if (parentNav) {
closeDropdown(parentNav);
focusItem(parentNav, 'nav');
}
} else if (type === 'submenu') {
const parentDropdown = item.closest('.dropdown-item');
if (parentDropdown) {
closeSubmenu(parentDropdown);
focusItem(parentDropdown, 'dropdown');
}
}
break;
case 'Escape':
e.preventDefault();
closeAllDropdowns();
updateMenuInfo('None', 0);
break;
case 'Enter':
case ' ':
e.preventDefault();
const link = item.querySelector('a');
if (link) {
link.click();
}
break;
}
}
// Get navigation items by type
function getNavigationItems(type) {
switch(type) {
case 'nav':
return navItems;
case 'dropdown':
return document.querySelectorAll('.dropdown-item');
case 'submenu':
return document.querySelectorAll('.submenu li');
default:
return [];
}
}
// Focus on specific item
function focusItem(item, type) {
const link = item.querySelector('a');
if (link) {
link.focus();
}
}
// Handle navigation link clicks
function handleNavClick(linkText) {
showFeedback(`Navigated to: ${linkText}`);
closeAllDropdowns();
updateMenuInfo('None', 0);
}
// Handle menu item clicks
function handleMenuClick(linkText) {
const cleanText = linkText.replace(/[^\w\s]/g, '').trim();
showFeedback(`Selected: ${cleanText}`);
closeAllDropdowns();
updateMenuInfo('None', 0);
}
// Update menu information display
function updateMenuInfo(menuName, depth) {
activeMenu.textContent = menuName;
menuDepth.textContent = depth;
currentDepth = depth;
}
// Mobile menu toggle
navToggle.addEventListener('click', () => {
navToggle.classList.toggle('active');
navMenu.classList.toggle('active');
const isOpen = navMenu.classList.contains('active');
navToggle.setAttribute('aria-expanded', isOpen);
if (isOpen) {
showFeedback('Mobile menu opened');
} else {
showFeedback('Mobile menu closed');
closeAllDropdowns();
}
});
// Theme control handlers
controlButtons.forEach(button => {
button.addEventListener('click', function() {
const theme = this.getAttribute('data-theme');
// Update active button
controlButtons.forEach(btn => btn.classList.remove('active'));
this.classList.add('active');
// Update navigation theme
nav.className = `multi-dropdown-nav ${theme}-theme`;
// Update theme info
const themeNames = {
default: 'Default',
dark: 'Dark',
minimal: 'Minimal',
colorful: 'Colorful'
};
currentTheme.textContent = themeNames[theme];
showFeedback(`Changed to ${themeNames[theme]} theme`);
});
});
// Close dropdowns when clicking outside
document.addEventListener('click', (e) => {
if (!nav.contains(e.target)) {
closeAllDropdowns();
updateMenuInfo('None', 0);
}
});
// Handle window resize
window.addEventListener('resize', () => {
if (window.innerWidth > 768) {
navMenu.classList.remove('active');
navToggle.classList.remove('active');
closeAllDropdowns();
}
});
// Feedback function
function showFeedback(message) {
const existing = document.querySelector('.demo-feedback');
if (existing) existing.remove();
const feedback = document.createElement('div');
feedback.className = 'demo-feedback';
feedback.textContent = message;
feedback.style.cssText = `
position: fixed;
top: 20px;
left: 50%;
transform: translateX(-50%);
background: linear-gradient(135deg, #48bb78 0%, #38a169 100%);
color: white;
padding: 12px 20px;
border-radius: 8px;
font-size: 14px;
font-weight: 500;
z-index: 10001;
box-shadow: 0 4px 15px rgba(72, 187, 120, 0.3);
opacity: 0;
transition: opacity 0.3s ease;
`;
document.body.appendChild(feedback);
requestAnimationFrame(() => {
feedback.style.opacity = '1';
});
setTimeout(() => {
feedback.style.opacity = '0';
setTimeout(() => feedback.remove(), 300);
}, 2500);
}
// Initialize
initMultiDropdown();
// Initial feedback
setTimeout(() => {
showFeedback('Try hovering over menu items and use arrow keys for navigation!');
}, 1000);
// Expose API for external use
window.multiDropdownAPI = {
closeAllDropdowns,
showFeedback,
updateMenuInfo
};
});