实现一个nav导航栏菜单

在开发后台管理系统中,经常会遇上的一个导航菜单,就是点击了左侧的主菜单后,需要自动生成一个顶部nav导航栏菜单,根据点击的先后顺序,自动添加在顶部的nav导航栏菜单中,当导航栏菜单数量过多时,可以实现左右的拖动,寻找自己需要进入的菜单标签。

1.基本布局(我这里使用原生的html/css/js做的示例演示)

布局肯定就是一个大盒子,盒子里面包含了每一个导航栏菜单的标签,我这里因为是做示例代码,所以在外部又包了一层div,并且增加了2个按钮,用来模拟添加导航栏菜单和关闭导航栏菜单。

  <div class="content">
    <div class="nav">
      <!-- <div class="item">页面1</div> -->
    </div>
    <div class="btn">
      <button class="increament">加nav</button>
      <button class="decreament">减nav</button>
    </div>
  </div>

2.样式修改

  • 导航栏菜单一般都是横穿了整个剩余屏幕的,所以我这里使用了flex布局,整个导航栏菜单区域,我设置了一个15px的缩进,每一个导航栏菜单都有一个5px的间距。
  • 为了实现导航栏菜单的左右拖动,就需要设置一下整个导航栏菜单区域的overflow-x:overlay,使用overlay是为了让滚动条出现时不会挤压整个导航栏菜单区域,同时,导航栏菜单是不需要出现上下滚动的滚动条的,所以还要设置一下overflow-y:hidden
  • 可以拖动以后,但是会出现一个左右拖动的滚动条,在实际项目中肯定是不能有这个滚动条的,所以还要设置一下滚动条的宽度为0,::webkit-scrollbar{width:0px;}
.content .nav {
  width: 1000px;
  height: 34px;
  padding: 0 15px;
  background-color: pink;

  display: flex;
  align-items: center;

  overflow-x: overlay;
  /* overflow-y: hidden; */
  white-space: nowrap;
}

.content .nav .item{
  height: 24px;
  margin-right: 5px;
  background-color: skyblue;
  font-size: 12px;
  line-height: 24px;
}

::-webkit-scrollbar{
  width: 0px;
}

3.控制添加导航栏菜单时自动滚动效果

在添加导航栏菜单时,一般使用系统过程中都会操作好多的菜单,当导航栏菜单的数量的总宽度超过整个导航栏的宽度时,会自动进行平移,保证最后点击的菜单一定会展示在整个导航栏菜单的区域,而不是隐藏掉,所以就需要每次点击添加导航栏菜单时,获取到需要滚动的宽度,通过js让整个导航栏区域自动滚动到对应位置去。这就需要使用到scrollWith这个属性了.

nav.scrollTo(nav.scrollWidth,0)

完成上面的描述以后,就可以实现一个自动添加并自动滚动动最后一个菜单位置的导航栏的了,当然了,上面只是描述了一下实现的过程和部分代码逻辑,具体的示例请看下面的完整示例代码。

完整示例代码

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <link rel="stylesheet" href="./index.css">
</head>

<body>
  <div class="content">
    <div class="nav">
      <!-- <div class="item">页面1</div> -->
    </div>
    <div class="btn">
      <button class="increament">加nav</button>
      <button class="decreament">减nav</button>
    </div>
  </div>
</body>
<script src="./index.js"></script>
</html>
/*
* index.js
*/
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

.content {
  width: 100%;
  height: 100%;
  transform: translateY(300px);

  display: flex;
  flex-direction: column;
  align-items: center;
}

.content .nav {
  width: 1000px;
  height: 34px;
  padding: 0 15px;
  background-color: pink;

  display: flex;
  align-items: center;

  overflow-x: overlay;
  /* overflow-y: hidden; */
  white-space: nowrap;
}

.content .nav .item{
  height: 24px;
  margin-right: 5px;
  background-color: skyblue;
  font-size: 12px;
  line-height: 24px;
}

.content .btn {
  transform: translateY(50px);
}

.content .btn button{
  width: 50px;
  height: 38px;
  border: none;
  border-radius: 4px;
  background-color: #1e75fe;
  color: #fff;
  font-size: 14px;
}

.content .btn button:active{
  background-color: blue;
}

::-webkit-scrollbar{
  width: 0px;
}

//index.js
const nav = document.querySelector('.nav')
const increament = document.querySelector('.increament')
const decreament = document.querySelector('.decreament')

let index = 10
increament.onclick = () => {
  index++
  const div = document.createElement('div')
  div.className = 'item'
  div.innerHTML = `页面${index}`
  nav.appendChild(div)

  nav.scrollTo(nav.scrollWidth,0)
}

decreament.onclick = () => {
  nav.removeChild(document.querySelectorAll('.item')[index-1])
  index--
  nav.scrollTo(nav.scrollWidth,0)
}

const appendChildDiv = () => {
  for (let i = 0; i < index; i++) {
    const div = document.createElement('div')
    div.className = 'item'
    div.innerHTML = `页面${i+1}`
    nav.appendChild(div)
  }
}

appendChildDiv()

实现一个具有二级菜单导航栏通常会在前端网页设计中使用,可以采用HTMLCSS和JavaScript(如jQuery或Vue.js等库)来构建。以下是一个基本步骤的概述: 1. **HTML结构**: - 创建一个包含一级菜单的`<ul>`元素,每个一级菜单项都是一个`<li>`元素。 - 每个一级菜单项下,创建一个隐藏的`<ul>`作为二级菜单,通过添加`data-menu`属性标识。 ```html <nav class="navbar"> <ul class="nav-level-1"> <li data-menu="menu1"> <a href="#">一级菜单1</a> <ul class="nav-level-2" style="display:none;"> <li><a href="#">二级菜单1-1</a></li> <!-- 添加更多二级菜单项 --> </ul> </li> <!-- 其他一级菜单项 --> </ul> </nav> ``` 2. **CSS样式**: - 定义`.nav-level-1`和`.nav-level-2`的基本样式,包括位置、颜色、字体等。 - 使用`:hover`伪类来显示二级菜单,当鼠标悬停在一级菜单上时,二级菜单显示出来。 ```css .nav-level-1 li:hover > .nav-level-2 { display: block; } ``` 3. **JavaScript/jQuery** (可选): - 如果需要动态控制二级菜单的显示和隐藏,可以编写JavaScript或使用库如jQuery来监听点击事件。 - 当用户点击一级菜单时,检查`data-menu`属性,然后切换相应二级菜单的`display`状态。 ```javascript $(&#39;.nav-level-1 li&#39;).click(function(e) { e.preventDefault(); var submenu = $(this).find(&#39;.nav-level-2&#39;); if (submenu.is(&#39;:visible&#39;)) { submenu.slideUp(); } else { $(&#39;.nav-level-2&#39;).slideUp(); submenu.slideDown(); } }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值