原生JS实现导航下拉菜单效果

这里是原生JS实现导航下拉菜单效果的完整攻略。

确定HTML结构

首先,我们需要确定HTML结构。导航下拉菜单通常都是基于一个ul列表实现的,该列表作为导航栏的主体内容,每个列表项上展示导航项的名称,在鼠标移入导航项时,显示该项的子菜单,鼠标移出后,子菜单消失。以下是HTML示例:

<nav>
  <ul>
    <li><a href="#">导航项1</a>
      <ul>
        <li><a href="#">子菜单项1-1</a></li>
        <li><a href="#">子菜单项1-2</a></li>
        <li><a href="#">子菜单项1-3</a></li>
      </ul>
    </li>
    <li><a href="#">导航项2</a>
      <ul>
        <li><a href="#">子菜单项2-1</a></li>
        <li><a href="#">子菜单项2-2</a></li>
        <li><a href="#">子菜单项2-3</a></li>
      </ul>
    </li>
    <li><a href="#">导航项3</a>
      <ul>
        <li><a href="#">子菜单项3-1</a></li>
        <li><a href="#">子菜单项3-2</a></li>
        <li><a href="#">子菜单项3-3</a></li>
      </ul>
    </li>
  </ul>
</nav>

添加基础样式

接下来,我们需要给导航菜单添加一些基础样式,使其默认情况下可以正常显示。

nav ul {
    list-style: none;
    margin: 0;
    padding: 0;
}

nav li {
    margin: 0;
    padding: 0;
    position: relative;
}

nav a {
    display: block;
    color: #fff;
    background-color: #333;
    text-decoration: none;
    padding: 10px;
}

nav ul ul {
    position: absolute;
    top: 100%;
    left: 0;
    visibility: hidden;
}

nav ul li:hover > ul {
    visibility: visible;
}

nav ul ul li {
    position: relative;
}

nav ul ul ul {
    position: absolute;
    left: 100%;
    top: 0;
}

添加交互效果

最后,我们需要添加JavaScript交互效果,实现鼠标移入导航项时,展示对应的子菜单的功能。

let navItems = document.querySelectorAll('nav > ul > li')
for (let i = 0; i < navItems.length; i++) {
  navItems[i].addEventListener('mouseover', function() {
    let subMenu = this.querySelector('ul')
    if (subMenu) {
      subMenu.style.display = 'block'
    }
  })
  navItems[i].addEventListener('mouseout', function() {
    let subMenu = this.querySelector('ul')
    if (subMenu) {
      subMenu.style.display = 'none'
    }
  })
}

通过上述代码,我们可以在鼠标移入导航项时,展示对应的子菜单;在鼠标移出时,子菜单消失。

示例说明

以下是两个示例:

示例1

<nav>
  <ul>
    <li><a href="#">导航项1</a>
      <ul>
        <li><a href="#">子菜单项1-1</a></li>
        <li><a href="#">子菜单项1-2</a></li>
        <li><a href="#">子菜单项1-3</a></li>
      </ul>
    </li>
    <li><a href="#">导航项2</a>
      <ul>
        <li><a href="#">子菜单项2-1</a></li>
        <li><a href="#">子菜单项2-2</a></li>
        <li><a href="#">子菜单项2-3</a></li>
      </ul>
    </li>
    <li><a href="#">导航项3</a>
      <ul>
        <li><a href="#">子菜单项3-1</a></li>
        <li><a href="#">子菜单项3-2</a></li>
        <li><a href="#">子菜单项3-3</a></li>
      </ul>
    </li>
  </ul>
</nav>

该示例代码中,为导航栏添加HTML结构。通过添加基础样式和JavaScript交互效果,我们可以实现一个具有导航下拉菜单效果的导航栏。

示例2

<nav>
  <ul>
    <li><a href="#">Home</a></li>
    <li><a href="#">Products</a>
      <ul>
        <li><a href="#">Product 1</a></li>
        <li><a href="#">Product 2</a></li>
        <li><a href="#">Product 3</a></li>
      </ul>
    </li>
    <li><a href="#">About Us</a></li>
    <li><a href="#">Contact Us</a>
      <ul>
        <li><a href="#">Email Us</a></li>
        <li><a href="#">Call Us</a></li>
        <li><a href="#">Find Us</a>
          <ul>
            <li><a href="#">Map</a></li>
            <li><a href="#">Directions</a></li>
          </ul>
        </li>
      </ul>
    </li>
  </ul>
</nav>

该示例代码中,我们给导航栏添加了更多的菜单项,包含多层级的子菜单。通过上述步骤,我们同样可以实现一个具有多层级子菜单的导航栏。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生JS实现导航下拉菜单效果 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 使用CSS制作一个比较炫酷的页面切换动画

    下面是使用CSS制作比较炫酷的页面切换动画的攻略,包括具体步骤和示例说明。 攻略步骤 第一步:设置HTML和CSS基本结构 首先,需要设置HTML和CSS的基本结构。在HTML中,需要至少有两个页面容器,也就是两个div标签来包含每个页面的内容。在CSS中,需要设置页面容器的样式,包括width、height、position、overflow等属性,以及为…

    css 2023年6月10日
    00
  • 基于vue实现探探滑动组件功能

    为了更好地讲解“基于Vue实现探探滑动组件功能”的攻略,我会将这个过程分成以下几个步骤: 确定需求,明确要实现的功能 编写HTML、CSS和Javascript代码 安装Vue.js和必要的第三方依赖 构建Vue组件,定义事件和方法 运行和测试 接下来我会更详细地阐述每个步骤,并且提供两个示例进行说明。 1. 确定需求,明确要实现的功能 在开始编写代码之前,…

    css 2023年6月10日
    00
  • CSS3中box-shadow的用法介绍

    第一步:了解box-shadow box-shadow是CSS3中用来创建阴影的属性,它可以为一个元素添加一个或多个阴影。box-shadow的语法如下: box-shadow: h-shadow v-shadow blur spread color inset; 其中,各个参数如下: h-shadow: 必选,表示水平阴影的位置,可取正值(阴影在右边)或负…

    css 2023年6月9日
    00
  • CSS 日期垂直排列的两种技巧

    当我们在网页设计中需要展示日期时,可能会遇到日期的垂直排列问题,本文将会讲解CSS的两种技巧可以解决这个问题。 技巧一:使用flexbox布局 使用flexbox布局可以在垂直方向上轻松的实现日期的垂直排列。我们可以将日期元素放在一个父元素中,设置父元素为flex布局,并将flex-direction设置为column(默认为row,即横向排列)。这种方式非…

    css 2023年6月9日
    00
  • 利用CSS3实现圆角的outline效果的教程

    以下是实现利用CSS3实现圆角的outline效果的教程: 1. outline和border的异同 首先,需要了解outline和border的异同。 outline outline是一种单独的样式属性,用来为一个元素添加轮廓,不影响元素的位置和大小,也不一定为矩形。 它的语法如下: outline: [outline-color] [outline-st…

    css 2023年6月10日
    00
  • CSS权重关系及问题剖析

    下面我会详细讲解“CSS权重关系及问题剖析”的完整攻略,包括CSS权重的基本概念,权重的计算方法,以及常见的问题剖析。同时,我会举两个具体的例子来说明。 什么是CSS权重? 在CSS中,同时存在多个样式时,就会出现样式的覆盖问题。这时,就需要通过CSS权重的定义来确定哪一个样式规则优先级更高,从而确定最终的样式表达式。 CSS权重用于确定样式优先级,其中,权…

    css 2023年6月9日
    00
  • 轻松学习jQuery插件EasyUI EasyUI创建菜单与按钮

    下面是 “轻松学习jQuery插件EasyUI EasyUI创建菜单与按钮”的完整攻略: 创建菜单 EasyUI提供了$menu()方法可以创建一个菜单组件。下面是一个示例: $(‘#menu’).menu({ onClick:function(item){ alert(item.name); } }); 在上面的代码中,选择器 “$(‘#menu’)” 用…

    css 2023年6月10日
    00
  • Python selenium根据class定位页面元素的方法

    当使用Selenium在Web页面中定位元素时,有多种方式可以选择。其中定位某个元素的class属性是一种常见的方法。下面是根据class定位页面元素的步骤和代码示例。 步骤 打开Web页面; 使用find_element_by_class_name方法来定位所需的元素; 使用send_keys方法或click方法来操作这个元素。 代码示例 下面是两种不同的…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部