UIkit导航菜单点击后无法高亮当前项怎么办?
我在用 UIkit 做一个单页应用的侧边导航,想让点击的菜单项自动加上 active 状态,但试了几次都没成功。官方文档说会自动处理,但我动态生成的 nav 好像没这效果。
我尝试在点击时手动加 class,但每次刷新或切换路由后又没了。下面是我现在用的 JS 逻辑:
document.querySelectorAll('.uk-nav li a').forEach(link => {
link.addEventListener('click', () => {
document.querySelectorAll('.uk-nav li a').forEach(el => el.classList.remove('uk-active'));
link.classList.add('uk-active');
});
});
是不是哪里没考虑到?或者 UIkit 有更合适的 API 来处理这个?
你可以在主题里加个脚本,利用 JavaScript 监听路由变化,并且根据当前 URL 设置 active。这里有一个简单的示例:
pre class="pure-highlightjs line-numbers">
document.addEventListener('DOMContentLoaded', function() {
// 获取当前 URL 的路径部分
var currentPath = window.location.pathname;
// 遍历所有导航链接
document.querySelectorAll('.uk-nav li a').forEach(function(link) {
// 检查链接的 href 是否匹配当前路径
if (link.getAttribute('href') === currentPath) {
// 移除所有链接的 active 类
document.querySelectorAll('.uk-nav li a').forEach(function(el) {
el.classList.remove('uk-active');
});
// 添加 active 类到匹配的链接
link.classList.add('uk-active');
}
});
});
这段代码会在页面加载完成后执行,根据当前页面的 URL 设置相应的菜单项为 active。这样即使刷新或者路由变化,也能保持正确的激活状态。希望这个能解决你的问题,折腾了一下午终于找到了出路吧。