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

yizhihongxing

这里是原生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日

相关文章

  • 详解浮动元素引起的问题和解决办法

    详解浮动元素引起的问题和解决办法 在网页设计中,浮动元素常常用于实现图片和文字的排版布局,但同时也容易引起一些问题。本篇攻略将详细讲解浮动元素引起的问题和解决办法。 什么是浮动元素? 浮动元素是指在网页布局中,使用float属性将元素从正常的文档流中脱离出来,并向左或向右移动至其包含块的边界,直至碰到另一个浮动元素或包含块的边缘。通常用于实现文字环绕图片等排…

    css 2023年6月10日
    00
  • el-tree设置选中高亮/焦点高亮、选中节点加深背景及更改字体颜色等的方法

    设置选中高亮/焦点高亮、选中节点加深背景及更改字体颜色等功能是el-tree组件中常用的操作。本文将详细讲解如何使用Vue和Element UI来实现这些功能。 设置选中高亮/焦点高亮 使用Element UI的el-tree组件时,选中节点会有默认的选中状态样式。如果我们需要自定义选中状态样式,可以通过CSS来实现。当节点被选中时,它会添加一个.is-cu…

    css 2023年6月9日
    00
  • 对CSS中的Position、Float属性的一些深入探讨

    对CSS中的Position、Float属性的一些深入探讨 Position属性 概述 position 属性用于定义元素的定位方式。它常用于一些特殊的定位需求。这个属性的值有4个:static、relative、absolute和fixed。 static: 默认值,表示元素的定位不会受到影响,元素会遵循正常的文档流(normal flow)。 relat…

    css 2023年6月10日
    00
  • 在ASP.NET 2.0中操作数据之四十九:为GridView控件添加RadioButton

    在ASP.NET 2.0中操作数据之四十九:为GridView控件添加RadioButton 在ASP.NET网页中,我们通常会利用控件来方便快速地操作数据。在本篇攻略中,我们将介绍如何为GridView控件添加RadioButton。 准备工作 在操作前,我们需要有一个已经绑定数据源的GridView控件。通过控件的DataSource属性、DataBin…

    css 2023年6月10日
    00
  • div没有设置颜色时z-index不起作用的解决方法

    下面是详细讲解“div没有设置颜色时z-index不起作用的解决方法”的完整攻略。 问题背景 在 CSS 中,z-index 属性用于控制元素在 z 轴方向上的层叠顺序。但是,当一个 div 没有设置颜色时,其 z-index 属性并不会起作用,这可能会导致一些布局问题。 解决方法 解决这个问题的方法是给这个 div 设置一个不透明度(opacity)为 0…

    css 2023年6月9日
    00
  • css值转换成数值请抛弃parseInt

    下面我来详细讲解将 CSS 值转换成数值且抛弃 parseInt 函数的攻略。 1. 什么是 CSS 值? CSS 值指的是使用 CSS 定义的一组值,比如长度值、百分比、颜色值等。它们在 CSS 中被广泛应用,比如用于定位元素、调整字体大小等。 2. 为什么要将 CSS 值转换成数值? 在一些场景下,需要将 CSS 值转换成数值进行计算或比较。比如我们想要…

    css 2023年6月10日
    00
  • 前端学习笔记style,currentStyle,getComputedStyle的用法与区别

    前言 在前端开发中,样式的处理是非常重要的一部分。而 style、currentStyle 和 getComputedStyle 是三种常见的处理样式的方式。本篇攻略将详细讲解它们的用法和区别。 style style 属性用于在 JavaScript 中设置和返回样式。我们可以通过给 HTMLElement 对象的 style 属性赋值来设置样式,也可以通…

    css 2023年6月10日
    00
  • HTML超链接标签(a标签)详解

    HTML超链接标签<a>用于添加链接到网页上,并可以链接到其他网页、文档、图像、音频、视频等。 基本语法 <a href="链接地址">链接文本</a> 其中, href 属性表示链接地址,可以是绝对路径或相对路径,也可以是外部网址。链接文本是可选的,可以是文字、图片等。 示例代码: 超链接到外部网址:…

    Web开发基础 2023年3月15日
    00
合作推广
合作推广
分享本页
返回顶部