原生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日

相关文章

  • div被iframe遮住的几种情况及解决方法

    那么讲解“div被iframe遮住的几种情况及解决方法”的攻略如下: 1. 背景介绍 在HTML页面中,div和iframe是常见的元素。div用于布局,iframe用于引入其他页面或文档。在某些情况下,div与iframe之间的层级关系可能出现问题,导致div被iframe遮住,给页面带来不良影响。因此,了解这种情况及其解决方法是我们开发者必备的知识点。 …

    css 2023年6月11日
    00
  • javascript下拉列表菜单的实现方法

    JavaScript下拉列表菜单的实现方法分为两种:纯JavaScript实现和使用第三方库实现。 纯JavaScript实现 HTML结构 下拉列表菜单的HTML结构通常由一个<select>标签和多个<option>标签组成。<option>标签是<select>标签的子元素,用于设置下拉菜单中的选项。 具…

    css 2023年6月10日
    00
  • CSS实现HTML背景图片拉伸铺满示例

    下面我就来详细讲解一下“CSS实现HTML背景图片拉伸铺满示例”的完整攻略。 一、在CSS中设置背景图片 要将图片设置为背景,需要使用CSS的背景属性,常用的有background-image属性。这个属性可以让我们设置任何CSS支持的图像,比如PNG、GIF、JPEG、SVG等等。 body { background-image: url(‘image.j…

    css 2023年6月9日
    00
  • 纯CSS3发光分享按钮的实现教程

    分步骤实现纯CSS3发光分享按钮: 1. 创建分享图标 首先,我们需要创建出我们的分享图标,图标的制作可以使用知名的图标字库如FontAwesome和Iconfont,或者使用自己的图片制作. 2. HTML布局 我们需要一个div元素来包裹我们的分享图标,然后给这个div设置一个id和一些基本的样式. <div id="share&quot…

    css 2023年6月11日
    00
  • CSS 设置滚动条样式的实例代码

    下面是详细讲解“CSS 设置滚动条样式的实例代码”的完整攻略: 1. CSS 设置滚动条样式的原理 在 CSS 中,我们可以通过 ::-webkit-scrollbar 伪元素选择器以及一些属性来调整滚动条的样式。 2. 滚动条样式基础 第一步,我们可以使用 ::-webkit-scrollbar 选择器来选中滚动条。比如说,我们可以改变滚动条的宽高、颜色等…

    css 2023年6月13日
    00
  • CSS教程:css属性之媒体(Media)类型

    让我们开始讲解“CSS教程: CSS属性之媒体类型”。 什么是媒体类型? 媒体类型是指应用 CSS 样式规则的设备或媒介类型。我们可以使用媒体查询(Media Query)指定不同设备或媒介类型的样式规则,以实现响应式设计。 媒体类型的类型 以下是常见的媒体类型: all:所有设备,包括打印机和屏幕。 print:打印机。 screen:电脑屏幕、平板和智能…

    css 2023年6月10日
    00
  • 用CSS实现Tab页切换效果的示例代码

    下面我将详细讲解如何用CSS实现Tab页切换效果的示例代码的完整攻略。 1. HTML结构 首先,在HTML中需要定义Tab选项卡的基本结构。我们需要一个Tab容器(通常是一个div元素),里面包含若干个Tab选项卡。每个Tab选项卡需要一个标题和对应的内容部分。基本结构如下: <div class="tab-container"&…

    css 2023年6月9日
    00
  • Vue内置组件Teleport的使用

    当我们在开发Vue应用时,可能遇到需要将一个组件移动到DOM树的另一个位置的场景,这时候我们就可以使用Vue 3.0中新增的Teleport内置组件来实现。 Teleport组件 Vue 3.0中新增了Teleport组件,用来将一个组件的内容移动到指定的DOM元素处,从而解决了父组件限制了子组件的显示位置的问题。 基本用法 首先,在需要挪动的组件中,我们需…

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