前端开发社区前端开发社区
    • 首页
    • VUE.js
    • React.js
    • HTML
    • CSS
    • JavaScript
    • PHP
    • jquery
    • Java
    • MySQL
    • uniapp
    前端开发社区
    当前位置:首页 > JavaScript

    js实现导航栏

    2026-04-04 01:53:45JavaScript

    实现导航栏的基本结构

    使用HTML和CSS创建导航栏的基础结构,HTML负责布局,CSS负责样式。

    <nav class="navbar">
      <ul class="nav-list">
        <li><a href="#home">首页</a></li>
        <li><a href="#about">关于</a></li>
        <li><a href="#services">服务</a></li>
        <li><a href="#contact">联系</a></li>
      </ul>
    </nav>
    .navbar {
      background-color: #333;
      padding: 10px 0;
    }
    
    .nav-list {
      list-style-type: none;
      margin: 0;
      padding: 0;
      display: flex;
      justify-content: center;
    }
    
    .nav-list li {
      margin: 0 15px;
    }
    
    .nav-list a {
      color: white;
      text-decoration: none;
      font-size: 18px;
    }
    
    .nav-list a:hover {
      color: #ddd;
    }

    添加响应式设计

    通过JavaScript实现响应式导航栏,在小屏幕上显示汉堡菜单。

    js实现导航栏

    const navbarToggle = document.querySelector('.navbar-toggle');
    const navList = document.querySelector('.nav-list');
    
    navbarToggle.addEventListener('click', () => {
      navList.classList.toggle('active');
    });
    <button class="navbar-toggle">☰</button>
    @media (max-width: 768px) {
      .nav-list {
        display: none;
        flex-direction: column;
        width: 100%;
      }
    
      .nav-list.active {
        display: flex;
      }
    
      .navbar-toggle {
        display: block;
      }
    }

    实现平滑滚动

    为导航链接添加平滑滚动效果,提升用户体验。

    document.querySelectorAll('.nav-list a').forEach(anchor => {
      anchor.addEventListener('click', function(e) {
        e.preventDefault();
        const targetId = this.getAttribute('href');
        const targetElement = document.querySelector(targetId);
        targetElement.scrollIntoView({
          behavior: 'smooth'
        });
      });
    });

    添加固定导航栏

    当页面滚动时,导航栏固定在顶部。

    js实现导航栏

    window.addEventListener('scroll', () => {
      const navbar = document.querySelector('.navbar');
      if (window.scrollY > 50) {
        navbar.classList.add('fixed');
      } else {
        navbar.classList.remove('fixed');
      }
    });
    .fixed {
      position: fixed;
      top: 0;
      width: 100%;
      z-index: 1000;
    }

    高亮当前活动菜单项

    根据当前滚动位置高亮显示对应的导航菜单项。

    const sections = document.querySelectorAll('section');
    const navItems = document.querySelectorAll('.nav-list li');
    
    window.addEventListener('scroll', () => {
      let current = '';
      sections.forEach(section => {
        const sectionTop = section.offsetTop;
        const sectionHeight = section.clientHeight;
        if (pageYOffset >= sectionTop - 300) {
          current = section.getAttribute('id');
        }
      });
    
      navItems.forEach(item => {
        item.classList.remove('active');
        if (item.querySelector('a').getAttribute('href') === `#${current}`) {
          item.classList.add('active');
        }
      });
    });
    .nav-list li.active a {
      color: #4CAF50;
      font-weight: bold;
    }

    添加下拉菜单

    为导航栏添加下拉菜单功能,适用于多级导航。

    const dropdowns = document.querySelectorAll('.dropdown');
    
    dropdowns.forEach(dropdown => {
      const button = dropdown.querySelector('.dropbtn');
      const content = dropdown.querySelector('.dropdown-content');
    
      button.addEventListener('click', () => {
        content.classList.toggle('show');
      });
    });
    
    window.addEventListener('click', (e) => {
      if (!e.target.matches('.dropbtn')) {
        const dropdowns = document.querySelectorAll('.dropdown-content');
        dropdowns.forEach(dropdown => {
          if (dropdown.classList.contains('show')) {
            dropdown.classList.remove('show');
          }
        });
      }
    });
    <li class="dropdown">
      <a class="dropbtn">服务</a>
      <div class="dropdown-content">
        <a href="#web">网站开发</a>
        <a href="#mobile">移动应用</a>
        <a href="#design">UI设计</a>
      </div>
    </li>
    .dropdown {
      position: relative;
      display: inline-block;
    }
    
    .dropdown-content {
      display: none;
      position: absolute;
      background-color: #f9f9f9;
      min-width: 160px;
      box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
      z-index: 1;
    }
    
    .dropdown-content a {
      color: black;
      padding: 12px 16px;
      text-decoration: none;
      display: block;
    }
    
    .dropdown-content a:hover {
      background-color: #f1f1f1;
    }
    
    .show {
      display: block;
    }

    标签: js
    分享给朋友:

    相关文章

    js实现拖拽

    js实现拖拽

    实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

    js实现防洪

    js实现防洪

    防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…

    js实现正交

    js实现正交

    正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…

    js 实现滚动

    js 实现滚动

    实现滚动的方法 使用 window.scrollTo() window.scrollTo() 方法可以滚动到文档中的特定位置。可以指定 x 和 y 坐标,或者使用平滑滚动的选项。 // 滚动到指定位…

    js实现原理

    js实现原理

    JavaScript 实现原理 JavaScript 是一种解释型语言,其实现原理涉及多个核心组件和运行机制,包括引擎、运行时环境、事件循环等。 引擎与解释执行 现代 JavaScript 引擎(如…

    js实现同步

    js实现同步

    同步与异步的概念 在JavaScript中,同步代码会按照顺序执行,每一行代码必须等待上一行代码执行完成后才能运行。异步代码则允许在等待某些操作(如网络请求)完成的同时继续执行其他代码。 实现同步的…

    最新文章
    • java子类如何调用父类的方法

      2026-04-09 08:54:50

    • java如何定义一个类

      2026-04-09 08:51:25

    • java 如何四舍五入

      2026-04-09 08:49:47

    • java如何四舍五入

      2026-04-09 08:48:15

    • java如何输出数组中的数组

      2026-04-09 08:45:31

    标签列表
    • vue (13931)
    • 原理 (626)
    • 分页 (603)
    • 跳转 (582)
    • 页面 (1094)
    • 路由 (650)
    • 列表 (473)
    • 功能 (1256)
    • 文件 (456)
    • 项目 (532)
    • 菜单 (444)
    • 组件 (1026)
    • 表格 (673)
    • 数据 (497)
    • 图片 (790)
    • js (4916)
    • 如何实现 (1693)
    • 效果 (625)
    • react (3311)
    • jquery (2238)
    • css (2728)
    • php (4572)
    • java (3021)
    • uniapp (1363)
    • elementui (828)

    陕ICP备2023000799号  网站地图

    Powered By Z-BlogPHP. Theme by TOYEAN.