前端开发社区前端开发社区
    • 首页
    • 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实现vue

    js实现vue

    Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

    js实现日历

    js实现日历

    实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

    js实现报表

    js实现报表

    使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

    js实现tab选项卡切换

    js实现tab选项卡切换

    实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 /…

    js实现变形

    js实现变形

    使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

    js实现文字滚动

    js实现文字滚动

    实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

    最新文章
    • js实现登录界面

      2026-04-04 03:28:12

    • js实现旋转90

      2026-04-04 03:24:35

    • js实现继承原理

      2026-04-04 03:23:08

    • js实现高亮显示

      2026-04-04 03:21:42

    • js实现点击复制

      2026-04-04 03:18:49

    标签列表
    • 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.