浏览器窗口Resize时更新导航下划线滑块位置的问题求助
解决Resize时定位激活元素的问题
要解决这个问题,核心是跟踪当前激活的
active)来标记状态,之后在窗口Resize时直接获取这个带标记的元素即可。以下是具体实现步骤:步骤1:标记激活的
修改你的handleEnter函数,在点击
active类,再给当前点击的function handleEnter() { // 移除所有li的active类,确保只有当前项激活 lists.forEach(list => list.classList.remove('active')); // 给当前点击的li添加active类 this.classList.add('active'); // 原有的滑块定位逻辑保持不变 const dropCoords = this.getBoundingClientRect(); slider.style.setProperty('opacity', '1'); slider.style.setProperty('width', `${dropCoords.width}px`); slider.style.setProperty('transform', `translate(${dropCoords.left}px)`); }
步骤2:Resize时获取激活的
更新窗口Resize事件的处理逻辑,不再默认取第一个
active类的window.addEventListener('resize', function(){ // 获取当前激活的li,没有的话取第一个 const activeLi = document.querySelector('.dropdown > li.active') || document.querySelector('.dropdown > li'); if (!activeLi) return; // 极端情况:没有li元素时直接退出 const elem = activeLi.getBoundingClientRect(); slider.style.setProperty('transform', `translate(${elem.left}px)`); slider.style.setProperty('width', `${elem.width}px`); });
可选:初始激活第一个
如果希望页面加载时就默认激活第一个
// 页面加载时默认激活第一个li并初始化滑块 if (lists.length > 0) { lists[0].classList.add('active'); const initialCoords = lists[0].getBoundingClientRect(); slider.style.setProperty('width', `${initialCoords.width}px`); slider.style.setProperty('transform', `translate(${initialCoords.left}px)`); }
这样修改后,无论点击切换
内容的提问来源于stack exchange,提问作者MrAndre
相关产品推荐
相关产品推荐

