爬行的蜗牛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: golang Linux PHP
查看: 83|回复: 0

平移移动端导航动画效果(可复制源码)

[复制链接]

152

主题

48

回帖

1137

积分

管理员

积分
1137
发表于 2024-11-23 16:15:22 | 显示全部楼层 |阅读模式
效果


111.gif


完整代码


HTML+JS


  1. <nav class="nav-bar">
  2.         <ul>
  3.             <li class="active"><i class="fas fa-home"></i>首页</li>
  4.             <li><i class="fas fa-info-circle"></i>关于</li>
  5.             <li><i class="fas fa-cogs"></i>服务</li>
  6.             <li><i class="fas fa-envelope"></i>联系</li>
  7.             <div class="slider"></div>
  8.         </ul>
  9.     </nav>
  10.     <div class="content">
  11.         <!-- 页面内容 -->
  12.     </div>
  13.     <script >
  14.         let lastScrollTop = 0;

  15. window.addEventListener('scroll', function() {
  16.     let scrollTop = window.pageYOffset || document.documentElement.scrollTop;
  17.     if (scrollTop > lastScrollTop) {
  18.         document.querySelector('.nav-bar').style.opacity = '0';
  19.     } else {
  20.         document.querySelector('.nav-bar').style.opacity = '1';
  21.     }
  22.     lastScrollTop = scrollTop;
  23. });

  24. // 添加导航项点击事件和滑动效果
  25. const slider = document.querySelector('.nav-bar .slider');
  26. const navItems = document.querySelectorAll('.nav-bar li');

  27. function moveSlider(item) {
  28.     slider.style.width = `${item.offsetWidth}px`;
  29.     slider.style.left = `${item.offsetLeft}px`;
  30. }

  31. navItems.forEach(item => {
  32.     item.addEventListener('click', function() {
  33.         document.querySelector('.nav-bar li.active').classList.remove('active');
  34.         this.classList.add('active');
  35.         moveSlider(this);
  36.     });
  37. });

  38. // 初始化滑块位置
  39. moveSlider(document.querySelector('.nav-bar li.active'));
  40.     </script>
复制代码
CSS

  1. <style>
  2. body {
  3.     margin: 0;
  4.     padding: 0;
  5.     font-family: Arial, sans-serif;
  6. }

  7. .nav-bar {
  8.     position: fixed;
  9.     top: 20px;
  10.     width: 100%;
  11.     background-color: rgba(51, 51, 51, 0.8);
  12.     transition: opacity 0.3s ease;
  13. }

  14. .nav-bar ul {
  15.     list-style-type: none;
  16.     padding: 0;
  17.     margin: 0;
  18.     display: flex;
  19.     justify-content: space-around;
  20.     position: relative;
  21. }

  22. .nav-bar li {
  23.     padding: 15px;
  24.     color: white;
  25.     cursor: pointer;
  26.     position: relative;
  27.     transition: all 0.3s ease;
  28.     z-index: 1;
  29. }

  30. .nav-bar li::after {
  31.     content: '';
  32.     position: absolute;
  33.     bottom: 0;
  34.     left: 0;
  35.     width: 0;
  36.     height: 2px;
  37.     background-color: #fff;
  38.     transition: width 0.3s ease;
  39. }

  40. .nav-bar li:hover::after,
  41. .nav-bar li.active::after {
  42.     width: 100%;
  43. }

  44. .nav-bar li.active {
  45.     background-color: rgba(255, 255, 255, 0.2);
  46. }

  47. .nav-bar .slider {
  48.     position: absolute;
  49.     bottom: 0;
  50.     left: 0;
  51.     height: 100%;
  52.     background-color: rgba(255, 255, 255, 0.2);
  53.     transition: all 0.3s ease;
  54. }

  55. .nav-bar li i {
  56.     margin-right: 5px;
  57. }

  58. .content {
  59.     height: 2000px; /* 用于模拟长页面 */
  60. }
  61.     </style>
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表