构建动态 Web 应用程序时,用户界面 (UI) 需要提供直观的导航体验。无论是具有多个产品类别的电子商务网站还是内容丰富的管理仪表板,拥有活动状态和可扩展菜单都可以增强可用性。在这篇博文中,我们将逐步创建一个 JavaScript 脚本,该脚本动态突出显示导航中的当前页面,并根据用户的路径展开相关部分。
当用户浏览多层菜单时,我们希望:
让我们看一个示例 HTML 结构以及如何添加 JavaScript 以使我们的菜单变得智能。
这是一个典型的嵌套菜单结构。我们将为菜单中的每个项目使用 menu-item,为链接使用 menu-link,为可折叠子菜单使用 menu-sub。
<!-- 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;
这会获取当前页面的路径(例如,/inventory-issues),我们将用它来与菜单中每个链接的 href 进行比较。
const links = document.querySelectorAll('.menu-link');
我们选择具有菜单链接类的所有元素,假设这些元素包含指向网站各个部分的链接。
if (link.getAttribute('href') === currentPath) {
对于每个链接,我们检查其 href 是否与 currentPath 匹配。如果是,则该链接适用于当前页面。
menuItem.classList.add('active');
我们向最近的菜单项添加一个活动类,允许我们设置活动页面链接的样式。
const parentMenuItem = parentMenu.closest('.menu-item'); parentMenuItem.classList.add('open');
如果活动链接位于子菜单 (menu-sub) 内,这部分代码将查找包含该子菜单的父菜单项并添加开放类,将其展开。
您需要为 CSS 中的活动类和开放类定义样式:
<!-- 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>
?来自埃迪古莱
以上是为活动状态和可扩展菜单创建动态导航脚本的详细内容。更多信息请关注PHP中文网其他相关文章!