偶然在网站上看见一带滑动动画的nav,参考资料实现了一个。
效果
鼠标从上一个tag滑到下一个时有highlight移动的动画
思路
手动造一个highlight的div,高度写死,宽度因为内容不一样长需要用js计算,获取下一个要展示的tag的宽度
鼠标移入的时候,改highlight的offsetLeft为下一个tag的offsetLeft,顺带切换opacity就做出来了
实现
html
1 2 3 4 5 6 7 8 9
| <div class="container"> <nav> <div class="highlight"></div> <a href="" class="menu-item">home</a> <a href="" class="menu-item">about</a> <a href="" class="menu-item">service</a> <a href="" class="menu-item">contact</a> </nav> </div
|
javscript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| const highLight = document.querySelector(".highlight"); const navTags = document.querySelectorAll("nav>a");
const handleMouseEnter = (e) => { const navTag = e.target; const navWidth = window.getComputedStyle(navTag).getPropertyValue("width"); const pos = navTag.offsetLeft; if (e.fromElement.classList.contains("menu-item")) { highLight.style.width = navWidth; highLight.style.transition = "all .15s ease-in-out"; highLight.style.transform = `translateX(${pos}px)`; }else{ highLight.style.width = navWidth; highLight.style.transition = " 0s ease-in-out"; highLight.style.transform = `translateX(${pos}px)`; } };
navTags.forEach((item) => { item.addEventListener("mouseenter", handleMouseEnter); });
|
代码放到jsrun里了:
nav滑动tag demo源码预览下载- JSRUN
参考:
JavaScript 滑动背景菜单_哔哩哔哩_bilibili