Beim Erstellen einer dynamischen Webanwendung muss die Benutzeroberfläche (UI) ein intuitives Navigationserlebnis bieten. Ganz gleich, ob es sich um eine E-Commerce-Website mit mehreren Produktkategorien oder ein inhaltsreiches Admin-Dashboard handelt: Aktive Status und erweiterbare Menüs verbessern die Benutzerfreundlichkeit. In diesem Blogbeitrag führen wir Sie Schritt für Schritt durch die Erstellung eines JavaScript-Skripts, das die aktuelle Seite in der Navigation dynamisch hervorhebt und relevante Abschnitte basierend auf dem Pfad des Benutzers erweitert.
Wenn Benutzer durch mehrschichtige Menüs navigieren, wollen wir:
Sehen wir uns eine beispielhafte HTML-Struktur an und erfahren, wie wir JavaScript hinzufügen, um unser Menü intelligent zu gestalten.
Hier ist eine typische verschachtelte Menüstruktur. Wir arbeiten mit „menu-item“ für jeden Eintrag im Menü, „menu-link“ für Links und „menu-sub“ für einklappbare Untermenüs.
<!-- Categories --> <li> <p>In this structure:</p> <ul> <li>Each main menu link (menu-toggle) opens a submenu when clicked.</li> <li>The actual pages are in the submenu links (menu-link).</li> </ul> <h3> The JavaScript Solution </h3> <p>We’ll use JavaScript to:</p> <ol> <li>Identify the current page.</li> <li>Apply an active class to the link that matches the current URL.</li> <li>Add an open class to the parent menu if the link is inside a collapsed submenu.</li> </ol> <p>Here’s the JavaScript code:<br> </p> <pre class="brush:php;toolbar:false"><script> window.onload = function () { const currentPath = window.location.pathname; // Get the current path const links = document.querySelectorAll('.menu-link'); // Select all menu links links.forEach(function (link) { // Check if the link's href matches the current page's path if (link.getAttribute('href') === currentPath) { // Add 'active' class to the parent 'li' element of the link const menuItem = link.closest('.menu-item'); if (menuItem) { menuItem.classList.add('active'); // Check if the link is within a 'menu-sub', expand the parent menu const parentMenu = menuItem.closest('.menu-sub'); if (parentMenu) { // Add 'open' class to the parent 'menu-item' of the submenu const parentMenuItem = parentMenu.closest('.menu-item'); if (parentMenuItem) { parentMenuItem.classList.add('open'); } } } } }); }; </script>
const currentPath = window.location.pathname;
Dadurch wird der Pfad der aktuellen Seite erfasst (z. B. /inventory-issues), den wir verwenden werden, um ihn mit der href jedes Links im Menü zu vergleichen.
const links = document.querySelectorAll('.menu-link');
Wir wählen alle Elemente mit dem Klassenmenü-Link aus, vorausgesetzt, diese enthalten Links zu verschiedenen Abschnitten der Website.
if (link.getAttribute('href') === currentPath) {
Für jeden Link prüfen wir, ob seine href mit dem aktuellen Pfad übereinstimmt. Wenn dies der Fall ist, gilt dieser Link für die aktuelle Seite.
menuItem.classList.add('active');
Wir fügen dem nächstgelegenen Menüpunkt eine aktive Klasse hinzu, sodass wir den aktiven Seitenlink formatieren können.
const parentMenuItem = parentMenu.closest('.menu-item'); parentMenuItem.classList.add('open');
Wenn sich der aktive Link innerhalb eines Untermenüs (menu-sub) befindet, findet dieser Teil des Codes den übergeordneten Menüpunkt, der dieses Untermenü enthält, fügt die offene Klasse hinzu und erweitert sie.
Sie möchten Stile für die aktiven und offenen Klassen in Ihrem CSS definieren:
<!-- Categories --> <li> <p>In this structure:</p> <ul> <li>Each main menu link (menu-toggle) opens a submenu when clicked.</li> <li>The actual pages are in the submenu links (menu-link).</li> </ul> <h3> The JavaScript Solution </h3> <p>We’ll use JavaScript to:</p> <ol> <li>Identify the current page.</li> <li>Apply an active class to the link that matches the current URL.</li> <li>Add an open class to the parent menu if the link is inside a collapsed submenu.</li> </ol> <p>Here’s the JavaScript code:<br> </p> <pre class="brush:php;toolbar:false"><script> window.onload = function () { const currentPath = window.location.pathname; // Get the current path const links = document.querySelectorAll('.menu-link'); // Select all menu links links.forEach(function (link) { // Check if the link's href matches the current page's path if (link.getAttribute('href') === currentPath) { // Add 'active' class to the parent 'li' element of the link const menuItem = link.closest('.menu-item'); if (menuItem) { menuItem.classList.add('active'); // Check if the link is within a 'menu-sub', expand the parent menu const parentMenu = menuItem.closest('.menu-sub'); if (parentMenu) { // Add 'open' class to the parent 'menu-item' of the submenu const parentMenuItem = parentMenu.closest('.menu-item'); if (parentMenuItem) { parentMenuItem.classList.add('open'); } } } } }); }; </script>
? von eddiegulay
Das obige ist der detaillierte Inhalt vonErstellen eines dynamischen Navigationsskripts für aktive Status- und erweiterbare Menüs. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!