首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

纯js实现二级导航栏

基础概念

二级导航栏通常指的是在主导航栏下方展开的子菜单,用于提供更详细的导航选项。纯JavaScript实现二级导航栏意味着不依赖任何前端框架,仅使用原生JavaScript、HTML和CSS来完成。

相关优势

  1. 性能优化:不依赖外部库或框架,减少了页面加载时间和资源消耗。
  2. 灵活性:可以根据具体需求定制导航栏的行为和样式。
  3. 学习价值:通过实现这样的功能,可以加深对原生JavaScript的理解和应用。

类型

  • 鼠标悬停展开:当用户将鼠标悬停在主菜单项上时,显示对应的子菜单。
  • 点击展开:用户点击主菜单项时,切换子菜单的显示状态。

应用场景

  • 电商网站:分类菜单下有多个子分类。
  • 企业官网:服务或产品页面下的详细分类。
  • 博客平台:文章分类下的子标签。

实现示例

以下是一个简单的纯JavaScript实现二级导航栏的示例:

HTML结构

代码语言:txt
复制
<nav class="navbar">
  <ul>
    <li><a href="#">首页</a></li>
    <li class="dropdown">
      <a href="#" class="dropbtn">产品</a>
      <div class="dropdown-content">
        <a href="#">产品1</a>
        <a href="#">产品2</a>
        <a href="#">产品3</a>
      </div>
    </li>
    <li><a href="#">关于我们</a></li>
  </ul>
</nav>

CSS样式

代码语言:txt
复制
.navbar ul {
  list-style-type: none;
  margin: 0;
  padding: 0;
  overflow: hidden;
  background-color: #333;
}

.navbar li {
  float: left;
}

.navbar li a {
  display: block;
  color: white;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
}

.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;
  text-align: left;
}

.dropdown-content a:hover {
  background-color: #f1f1f1;
}

JavaScript代码

代码语言:txt
复制
document.addEventListener('DOMContentLoaded', function() {
  var dropdowns = document.querySelectorAll('.dropdown');

  dropdowns.forEach(function(dropdown) {
    dropdown.addEventListener('mouseover', function() {
      this.querySelector('.dropdown-content').style.display = 'block';
    });

    dropdown.addEventListener('mouseout', function() {
      this.querySelector('.dropdown-content').style.display = 'none';
    });
  });
});

可能遇到的问题及解决方法

问题:子菜单在鼠标移出时立即消失。 原因mouseout事件在鼠标移出子菜单区域时也会触发,导致子菜单立即隐藏。 解决方法:使用mouseleave事件代替mouseout,因为mouseleave只在鼠标完全离开元素时触发。

代码语言:txt
复制
dropdown.addEventListener('mouseleave', function() {
  this.querySelector('.dropdown-content').style.display = 'none';
});

通过这种方式,可以实现一个简单且功能齐全的二级导航栏,适用于多种网页设计需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 【Flutter】底部导航栏实现 ( BottomNavigationBar 底部导航栏 | BottomNavigationBarItem 导航栏条目 | PageView )

    文章目录 一、Scaffold 组件 二、底部导航栏整体架构 三、BottomNavigationBar 底部导航栏 四、BottomNavigationBarItem 导航栏条目 五、PageView...组件 六、完整代码示例 七、相关资源 一、Scaffold 组件 ---- Flutter 中的 Scaffold 组件实现了基础的材料设计 ( Material Design ) 可视化布局结构 ;...Scaffold 提供了显示左侧侧拉导航栏 , 底部导航 , 浮动按钮等 API ; Scaffold 构造函数如下 : class Scaffold extends StatefulWidget {...底部导航栏组件 , 该底部导航栏的 item 设置图标与文字组件数组 , onTap 字段设置 ValueChanged 点击回调方法 , 通过该方法设置当前选择的页面索引值 ; Scaffold..., /// 导航栏按钮点击事件 onTap: (pageIndex) { /// 跳转到对应的导航页面 _pageController.jumpToPage(pageIndex)

    6.2K50

    最简单的纯js实现点击展开二级菜单功能

    我最近就遇到做个点击展开二级菜单的要求,当然只能用原生的JS去写来实现,我借鉴了网上的一个案例,补充一下,分享一下: 如果,默认打开页面进来时二级菜单是隐藏的,需要点击才能展现二级菜单,再点击就是隐藏二级菜单...这里有两个点,实现展现和隐藏用display=”block“和display=”none”,另外就是要做一个判断,if else的判断当前是block还是none。 二级餐单1 二级餐单1 二级餐单1 一级菜单2 二级菜单2 二级菜单2 二级菜单2 ...如果,你的页面默认进来二级菜单是展现的,点击时才关闭。直接把style标签的样式display=”none”去掉就可以。同时需要修改一下js。

    4.3K20

    【CSS】828- 纯CSS导航栏下划线跟随效果

    尝试思考一下上面的效果或者动手尝试一下,不借助 JS ,能否巧妙的实现上述效果。 OK,继续。这个效果是我在业务开发的过程中遇到的一个类似的小问题。...定义需求 我们定义一下简单的规则,要求如下: 不可思议的CSS 导航栏 光标小下划线跟随 PURE CSS...Nav Underline 导航栏目的 li 的宽度是不固定的 当从导航的左侧 li 移向右侧 li,下划线从左往右移动。...同理,当从导航的右侧 li 移向左侧 li,下划线从右往左移动。 实现需求 第一眼看到这个效果,感觉这个跟随动画,仅靠 CSS 是不可能完成的。...现在还剩下一个最难的问题: 如何让线条跟随光标的移动动作,实现当从导航的左侧 li 移向右侧 li,下划线从左往右移动。同理,当从导航的右侧 li 移向左侧 li,下划线从右往左移动。

    3K20
    领券